Enlaces de firma
Un enlace de firma abre una transacción de Hive en Hivesigner. La persona la revisa, la aprueba con su propia clave y Hivesigner la transmite desde su navegador. Después Hivesigner puede devolver a la persona a tu aplicación con el identificador de la transacción. Los enlaces de firma no necesitan cuenta de aplicación ni token. Cubren las 41 operaciones que Hivesigner admite, incluidas las transferencias y otras acciones que requieren la clave activa.
Cómo funciona un enlace de firma
- Tu aplicación construye un enlace que lleva una o varias operaciones.
- La persona abre el enlace. Hivesigner muestra cada operación en palabras claras en la pantalla "Confirmar transacción", con la clave que necesita.
- La persona aprueba. Hivesigner firma la transacción en el navegador con la clave de la cuenta seleccionada en Hivesigner. Después envía la transacción a la red Hive.
- Cuando el enlace nombra una URL de retorno, Hivesigner envía allí a la persona con el identificador de la transacción.
Tu aplicación nunca ve ninguna clave. Cualquier sitio puede crear un enlace de firma: no hay ningún client_id que enviar.
Formas de enlace
Hivesigner lee dos tipos de enlaces de firma: enlaces codificados y enlaces antiguos.
Enlaces codificados
Un enlace codificado lleva las operaciones como JSON, codificadas en base64url. Usa el formato hive://sign/... del paquete hive-uri, con hive:// sustituido por https://hivesigner.com/.
| Forma | Lo que contiene B64U |
|---|---|
https://hivesigner.com/sign/op/B64U |
Una operación: ["vote", {...}] |
https://hivesigner.com/sign/ops/B64U |
Una lista de operaciones: [["transfer", {...}], ["transfer", {...}]] |
https://hivesigner.com/sign/tx/B64U |
Una transacción entera, con su propia cabecera |
B64U es el texto JSON, codificado como UTF-8 y después como base64 con + sustituido por -, / por _ y el relleno = por ..
Para op y ops, Hivesigner construye la transacción alrededor de las operaciones. Rellena el bloque de referencia y la expiración.
Para tx, Hivesigner conserva el ref_block_num, el ref_block_prefix y la expiration propios de la transacción. También conserva las firmas que la transacción ya lleva. Esto permite que varias cuentas firmen una misma transacción por turnos, para una cuenta que controlan varias personas. Hivesigner rechaza una transacción cuya lista extensions no está vacía.
Nota: Hivesigner normaliza algunos valores antes de firmar, como los importes y los campos dejados en sus valores por defecto. La transacción firmada puede tener entonces un identificador distinto del que construiste. Lee el identificador desde la URL de retorno.
Enlaces antiguos
Un enlace antiguo nombra una operación en la ruta y pone sus campos en la consulta:
https://hivesigner.com/sign/vote?author=AUTHOR&permlink=PERMLINK&weight=10000
https://hivesigner.com/sign/transfer?to=RECIPIENT&amount=1.000%20HIVE&memo=MEMO
https://hivesigner.com/sign/transfer-to-vesting?amount=10.000%20HIVE
- Escribe el nombre de la operación en snake case (
transfer_to_vesting), camel case (transferToVesting) o kebab case (transfer-to-vesting). - Da cada campo como parámetro de consulta con el nombre del campo. Codifica en URL cada valor.
- Escribe las listas y los objetos como JSON, por ejemplo
required_posting_auths=["alice"]. Una lista de identificadores o nombres también puede separarse por comas:proposal_ids=379,380. - Escribe los booleanos como
trueofalse.
Un enlace antiguo lleva una sola operación. Usa un enlace codificado para más de una.
Valores de los campos
Estas reglas valen para todas las formas:
- Valores por defecto. Un campo que omites toma su valor por defecto. La cuenta que actúa (
voter,from,ownery campos parecidos) toma por defecto la cuenta que firma. Elweightde un voto toma por defecto10000(100%). - Los importes son un número y un símbolo:
1.000 HIVE,0.500 HBDo100.000000 VESTS. Hivesigner escribe HIVE y HBD con 3 decimales y VESTS con 6. - Hive Power. Un campo que acepta VESTS también acepta un importe en HP, como
100 HP. Hivesigner lo convierte a VESTS al cambio actual antes de que la persona pueda aprobar. __signeren cualquier valor pasa a ser el nombre de la cuenta que firma. Por ejemplo, uncustom_jsonde seguimiento puede nombrar__signercomo seguidor dentro de sujson.- Los enteros deben ser números enteros dentro del rango que la cadena acepta, como
-10000a10000para elweightde un voto.
Hivesigner rechaza el enlace entero cuando un valor no encaja en su campo, cuando una operación es desconocida o cuando el enlace no lleva ninguna operación. La persona ve "Vaya, algo ha salido mal. Los datos proporcionados no son válidos." y no se firma nada.
Parámetros
Añade estos a la cadena de consulta de cualquier enlace de firma:
| Parámetro | Significado |
|---|---|
cb |
La URL de retorno, codificada en base64url. Esto es lo que hive-uri escribe para su opción callback. |
redirect_uri |
La URL de retorno como texto normal codificado en URL. Los enlaces antiguos usan este. Un enlace codificado lo usa cuando no tiene cb. |
nb |
Solo firmar. Hivesigner firma la transacción sin transmitirla. Pon {{sig}} en la URL de retorno para recibir la firma (consulta Marcadores de la URL de retorno). Cualquier valor sirve, incluso uno vacío (nb=). |
s |
La cuenta que debe firmar. Cuando hay otra cuenta seleccionada, Hivesigner pide a la persona que cambie a esta. No firma con ninguna otra cuenta. |
Usa una URL de retorno https://. Hivesigner ignora una URL de retorno que no sea una URL http o https y se queda entonces en su propia pantalla de resultado.
Hivesigner elige la clave a partir de las operaciones. No hay ningún parámetro para elegirla: Hivesigner ignora authority (y el parámetro a de hive-uri) en los enlaces de firma. Consulta Qué clave necesita un enlace.
Marcadores de la URL de retorno
Después de que la persona apruebe, Hivesigner rellena estos marcadores en la URL de retorno:
| Marcador | Valor |
|---|---|
{{id}} |
El identificador de la transacción |
{{sig}} |
La firma, para un enlace de solo firma (nb) |
{{block}} |
Se deja vacío |
{{txn}} |
Se deja vacío |
{{data}} |
Se deja vacío |
Una URL de retorno sin ninguno de estos marcadores recibe el identificador de la transacción añadido como id, después de ? o &:
https://YOUR_APP/done becomes https://YOUR_APP/done?id=TRANSACTION_ID
https://YOUR_APP/done?step=2 becomes https://YOUR_APP/done?step=2&id=TRANSACTION_ID
https://YOUR_APP/tx/{{id}} becomes https://YOUR_APP/tx/TRANSACTION_ID
Hivesigner redirige en cuanto un nodo de Hive acepta la transacción. Puede que la transacción todavía no esté en un bloque. Búscala por su identificador cuando necesites saber que se incluyó.
Tu URL de retorno no se llama cuando la red rechaza la transacción (la persona ve el error) ni cuando la persona se va sin aprobar.
Construye un enlace
Con hive-uri
El paquete hive-uri (https://www.npmjs.com/package/hive-uri) codifica operaciones en enlaces. Usa la versión 0.2.8 o posterior, que codifica correctamente cualquier texto Unicode.
npm install hive-uri
import { encodeOp, encodeOps } from 'hive-uri';
// One vote. __signer becomes the account that signs.
const vote = encodeOp(
['vote', { voter: '__signer', author: 'AUTHOR', permlink: 'PERMLINK', weight: 10000 }],
{ callback: 'https://YOUR_APP/voted?tx={{id}}' },
);
// Two transfers in one transaction.
const payout = encodeOps(
[
['transfer', { from: '__signer', to: 'RECIPIENT_1', amount: '1.000 HIVE', memo: 'MEMO' }],
['transfer', { from: '__signer', to: 'RECIPIENT_2', amount: '2.000 HIVE', memo: 'MEMO' }],
],
{ callback: 'https://YOUR_APP/paid' },
);
const voteLink = vote.replace('hive://', 'https://hivesigner.com/');
const payoutLink = payout.replace('hive://', 'https://hivesigner.com/');
El objeto de opciones acepta callback (se escribe como cb), no_broadcast: true (se escribe como nb) y signer (se escribe como s). encodeTx hace lo mismo para una transacción entera.
Con el SDK de JavaScript
El paquete hivesigner tiene sendOperation, sendOperations y sendTransaction. Toman los mismos argumentos que los codificadores de hive-uri y devuelven el enlace https://hivesigner.com/sign/...:
import { sendOperation } from 'hivesigner';
const link = sendOperation(
['transfer', { from: '__signer', to: 'RECIPIENT', amount: '1.000 HIVE', memo: 'MEMO' }],
{ callback: 'https://YOUR_APP/paid' },
);
En TypeScript los tipos exigen el tercer argumento: pasa undefined para recibir el enlace. En un navegador, una función pasada como tercer argumento hace que abran el enlace en una pestaña nueva en lugar de devolverlo. Consulta SDK.
Sin código
https://hivesigner.com/signs ("Firmar transacción") lista todas las operaciones admitidas con un formulario para sus campos. Construye un enlace /sign/op/ y lo abre.
Qué clave necesita un enlace
Cada operación necesita una clave: de publicación, activa o de propietario. La tabla de abajo las lista. Tres operaciones dependen de sus valores:
custom_jsonnecesita la clave activa cuandorequired_authsnombra una cuenta. Si no, necesita la clave de publicación.account_updatenecesita la clave de propietario cuando defineowner. Si no, necesita la clave activa.account_update2necesita la clave de propietario cuando defineowner. Necesita la clave activa cuando defineactive,posting,memo_keyojson_metadata. Solo conposting_json_metadata, necesita la clave de publicación.
Hivesigner firma un enlace con una sola clave, así que todas las operaciones de un enlace deben necesitar la misma. Hivesigner se niega a firmar un enlace que las mezcle y le dice a la persona por qué. Envía esas operaciones en enlaces separados.
Cuando la cuenta seleccionada no tiene la clave en el dispositivo, Hivesigner dice qué clave falta y ofrece añadirla. Consulta Cuando falta la clave.
Lo que ve la persona
- Una pantalla titulada "Confirmar transacción", con una tarjeta por cada operación: un resumen en palabras claras, la clave que necesita y los valores que lleva.
- "Se te redirigirá a HOST." cuando el enlace tiene una URL de retorno. Usa una URL de retorno en tu propio sitio, para que las personas reconozcan el host.
- Un aviso cuando una operación actúa como una cuenta distinta de la que firma.
- Aprobar, o Firmar para un enlace de solo firma. Una cuenta bloqueada pide antes su código de acceso.
- Después de transmitir, "Transacción transmitida correctamente" con el identificador de la transacción. Después, la redirección a tu URL de retorno.
Revisar y firmar describe la pantalla para las personas.
Operaciones admitidas
Hivesigner firma estas 41 operaciones, por sus nombres en la cadena. Cualquier otra se rechaza. El nombre es el que Hivesigner muestra en la pantalla de confirmación.
| Operación | Clave | Nombre |
|---|---|---|
transfer |
Activa | Transferencia |
recurrent_transfer |
Activa | Transferencia recurrente |
delegate_vesting_shares |
Activa | Delegar Hive Power |
transfer_to_vesting |
Activa | Power up |
set_withdraw_vesting_route |
Activa | Definir ruta de power down |
withdraw_vesting |
Activa | Power down |
transfer_to_savings |
Activa | Transferir a ahorros |
transfer_from_savings |
Activa | Transferir desde ahorros |
cancel_transfer_from_savings |
Activa | Cancelar transferencia desde ahorros |
convert |
Activa | Convertir HBD a HIVE |
collateralized_convert |
Activa | Convertir HIVE a HBD |
account_witness_vote |
Activa | Voto a testigo |
witness_update |
Activa | Actualización de testigo |
witness_set_properties |
Activa | Definir propiedades de testigo |
account_witness_proxy |
Activa | Proxy de gobernanza |
claim_account |
Activa | Reclamar crédito de cuenta |
account_create |
Activa | Crear cuenta |
create_claimed_account |
Activa | Crear cuenta con créditos de cuenta |
vote |
Publicación | Voto |
limit_order_create |
Activa | Crear orden límite |
limit_order_create2 |
Activa | Crear orden límite |
limit_order_cancel |
Activa | Cancelar orden límite |
claim_reward_balance |
Publicación | Reclamar recompensas |
comment |
Publicación | Publicación o comentario |
comment_options |
Publicación | Opciones de publicación o comentario |
custom_json |
Publicación, o Activa cuando required_auths está definido |
Operación personalizada |
delete_comment |
Publicación | Eliminar comentario |
account_update |
Activa, o Propietario cuando owner está definido |
Actualizar cuenta (activa) |
account_update2 |
Publicación, Activa o Propietario, según el campo | Actualizar cuenta (publicación) |
change_recovery_account |
Propietario | Cambiar cuenta de recuperación |
create_proposal |
Activa | Crear propuesta |
remove_proposal |
Activa | Eliminar propuesta |
update_proposal_votes |
Activa | Actualizar votos de propuestas |
update_proposal |
Activa | Actualizar propuesta |
escrow_transfer |
Activa | Transferencia en fideicomiso |
escrow_approve |
Activa | Aprobar fideicomiso |
escrow_dispute |
Activa | Disputa de fideicomiso |
escrow_release |
Activa | Liberar fideicomiso |
account_create_with_delegation |
Activa | Crear cuenta con delegación |
request_account_recovery |
Activa | Solicitar recuperación de cuenta |
recover_account |
Propietario | Recuperar cuenta |