TRON (tron-sign-request)
BitTool Signer usa los tipos UR públicos de Keystone para TRON. No envíes JSON de acciones de TronLink o TokenPocket, esquemas de URL ni el antiguo keystone-sign-request; se rechazan.
tron-sign-request
| Clave | Campo | Tipo | Contenido |
|---|---|---|---|
| 1 | request-id | 37(bytes) | Exactamente 16 bytes aleatorios |
| 2 | sign-data | bytes | data-type 1: los bytes protobuf de raw_data · data-type 2: los bytes del mensaje |
| 3 | data-type | uint | 1 transacción · 2 mensaje personal |
| 4 | derivation-path | 304(crypto-keypath) | m/44'/195'/0'/0/i con la huella maestra |
| 5 | address | bytes (21) | 0x41 ‖ ID de cuenta de 20 bytes: la dirección decodificada con Base58Check, no el texto |
| 6 | origin | text | Se muestra al usuario |
data-type 1: transacciones
sign-data es el raw_data de la transacción serializado como protobuf: los bytes de raw_data_hex, tal como los devuelven TronWeb o las APIs /wallet/createtransaction y /wallet/triggersmartcontract. No es el mensaje Transaction completo (que envuelve raw_data y signature), ni texto hex, ni el txID.
El firmante calcula txID = SHA-256(raw_data) y firma ese digest. Reglas:
| Regla | Detalle |
|---|---|
| Un solo contrato | Exactamente una entrada en raw_data.contract. |
| Campos de tiempo | ref_block_bytes (2 bytes), ref_block_hash (8 bytes), timestamp > 0 y expiration > timestamp. |
| Límite de comisión | Obligatorio (> 0) para TriggerSmartContract. Un límite de comisión alto se muestra como advertencia. |
| Permiso | Permission_id 0 (owner) o un ID de permiso active; 1 (witness) se rechaza. |
| Protobuf estricto | Se rechazan los campos desconocidos, los campos duplicados y los varints no canónicos. |
| TRC-10 | No compatible, incluido call_token_value en las llamadas a contratos. |
Contratos compatibles:
| Tipo | Contrato | Revisión |
|---|---|---|
| 1 | TransferContract | Importe de TRX y destinatario |
| 31 | TriggerSmartContract | Se decodifican las transferencias y aprobaciones TRC-20, TRC-721 y TRC-1155 (p. ej., transfer de USDT); las demás llamadas se muestran como calldata sin procesar y requieren consentimiento explícito |
| 46 | AccountPermissionUpdateContract | Permisos owner/active, claves, pesos, umbrales; siempre de alto riesgo |
| 54–59 | Stake 2.0 y recursos: FreezeBalanceV2, UnfreezeBalanceV2, WithdrawExpireUnfreeze, DelegateResource, UnDelegateResource, CancelAllUnfreezeV2 | Importes, tipo de recurso, receptor, bloqueo |
data-type 2: mensajes
sign-data son los bytes del mensaje (de 1 a 8192). El firmante sigue TIP-191, el esquema de signMessageV2 de TronWeb:
digest = Keccak-256( 0x19 ‖ "TRON Signed Message:\n" ‖ decimal(length of message) ‖ message )
El texto se muestra como texto; los demás bytes se muestran en hex, marcados como opacos, y requieren consentimiento explícito.
tron-signature
tron-signature = {
1: 37(request-id bytes),
2: signature ; 65 bytes: r (32) ‖ s (32) ‖ recovery id (0 or 1)
}
El byte de recuperación es 0 o 1, no 27/28. Para las transacciones, añade los 65 bytes en hex al array signature de la transacción, deja raw_data y raw_data_hex sin cambios y difúndela con /wallet/broadcasttransaction (TronWeb: trx.sendRawTransaction).
Para los mensajes, muchas herramientas de TRON (verifyMessageV2 de TronWeb, dApps a través de WalletConnect) esperan que el último byte sea 27/28: súmale 27 cuando entregues la firma. No cambies el formato de la firma de las transacciones.
Código
TRON no tiene ninguna biblioteca de registro UR de uso extendido, así que este ejemplo escribe el CBOR directamente con cborg, usando la función auxiliar de keypath:
import { randomBytes } from 'node:crypto';
import { UR, UREncoder, URDecoder } from '@ngraveio/bc-ur';
import { base58check } from '@scure/base';
import { sha256 } from '@noble/hashes/sha2.js';
import { encode, decode, Tagged } from 'cborg';
import { SigningKey, computeAddress } from 'ethers';
import { keypath } from './keypath.mjs';
const b58 = base58check(sha256);
// `tx` is an unsigned transaction from TronWeb / the TRON HTTP API: { txID, raw_data, raw_data_hex }
export function buildTronRequest(tx, { path, masterFingerprint, address }) {
const requestId = randomBytes(16);
const cbor = encode(new Map([
[1, new Tagged(37, requestId)], // request-id (uuid)
[2, Buffer.from(tx.raw_data_hex, 'hex')], // raw_data protobuf bytes
[3, 1], // data-type: 1 transaction, 2 message
[4, keypath(path, masterFingerprint)], // "m/44'/195'/0'/0/0"
[5, b58.decode(address)], // 21 bytes: 0x41 ‖ 20-byte account ID
[6, 'BitTool Wallet'], // origin
]));
const encoder = new UREncoder(new UR(Buffer.from(cbor), 'tron-sign-request'), 400);
const frames = [];
for (let i = 0; i < encoder.fragmentsLength; i++) frames.push(encoder.nextPart().toUpperCase());
return { requestId, frames };
}
const tags = { 37: (decode) => decode() }; // tag 37 (uuid): keep the raw bytes
export function attachTronSignature(frames, tx, { requestId, address }) {
const decoder = new URDecoder();
for (const frame of frames) decoder.receivePart(frame);
if (!decoder.isSuccess()) throw new Error('Incomplete or invalid QR');
const ur = decoder.resultUR();
if (ur.type !== 'tron-signature') throw new Error(`Expected tron-signature, got ${ur.type}`);
const response = decode(ur.cbor, { useMaps: true, tags, strict: true });
if (!Buffer.from(response.get(1)).equals(requestId)) throw new Error('Signature is for another request');
const sig = Buffer.from(response.get(2)); // r (32) ‖ s (32) ‖ recovery id (0 or 1)
if (sig.length !== 65 || sig[64] > 1) throw new Error('Unexpected signature format');
const txID = Buffer.from(sha256(Buffer.from(tx.raw_data_hex, 'hex'))).toString('hex');
if (txID !== tx.txID) throw new Error('txID does not match raw_data');
const evmStyle = { r: '0x' + sig.subarray(0, 32).toString('hex'), s: '0x' + sig.subarray(32, 64).toString('hex'), v: 27 + sig[64] };
const recovered = computeAddress(SigningKey.recoverPublicKey('0x' + txID, evmStyle)); // 0x + 20 bytes
if (b58.encode(Buffer.from('41' + recovered.slice(2), 'hex')) !== address) throw new Error('Signed by an unexpected key');
return { ...tx, signature: [...(tx.signature ?? []), sig.toString('hex')] }; // broadcast with sendRawTransaction
}
Vectores de prueba
Todos desde m/44'/195'/0'/0/0 (TUEZSdKsoDHQMeZwihtdoBiN46zxhGWYdH) de la frase de prueba. El bloque de referencia, las marcas de tiempo y los txID son sintéticos; las transacciones nunca se difundieron.
- Transferencia de TRX
- TRC-20 (USDT)
- Mensaje
Envío de 1.5 TRX (1 500 000 sun) a TJRabPrwbZy45sbavfcjinPJC18kjpRTv8.
{
"txID": "b396c11e25482bc348d39e620000ef16290d0d17b7649cb94fee63d0203695eb",
"raw_data": {
"contract": [
{
"parameter": {
"value": {
"amount": 1500000,
"owner_address": "41c8599111f29c1e1e061265b4af93ea1f274ad78a",
"to_address": "415cbdd86a2fa8dc4bddd8a8f69dba48572eec07fb"
},
"type_url": "type.googleapis.com/protocol.TransferContract"
},
"type": "TransferContract"
}
],
"ref_block_bytes": "a1b2",
"ref_block_hash": "0123456789abcdef",
"expiration": 1792310460000,
"timestamp": 1792310400000
},
"raw_data_hex": "0a02a1b222080123456789abcdef40e0fc9cf094345a67080112630a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e747261637412320a1541c8599111f29c1e1e061265b4af93ea1f274ad78a1215415cbdd86a2fa8dc4bddd8a8f69dba48572eec07fb18e0c65b7080a899f09434"
}
Solicitud (tu cartera → BitTool Signer)
{
"1 request-id": {
"uuid (tag 37)": "5f1e9b2c7d3a4e6f8a0b1c2d3e4f5a08"
},
"2 sign-data": "0a02a1b222080123456789abcdef40e0fc9cf094345a67080112630a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e747261637412320a1541c8599111f29c1e1e061265b4af93ea1f274ad78a1215415cbdd86a2fa8dc4bddd8a8f69dba48572eec07fb18e0c65b7080a899f09434",
"3 data-type": 1,
"4 derivation-path": {
"crypto-keypath (tag 304)": {
"1 components": [
44,
true,
195,
true,
0,
true,
0,
false,
0,
false
],
"2 source-fingerprint": 1942346250
}
},
"5 address": "41c8599111f29c1e1e061265b4af93ea1f274ad78a",
"6 origin": "BitTool Wallet"
}
Mostrar el texto del QR y el CBOR sin procesar
UR:TRON-SIGN-REQUEST/1-2/LPADAOCSURCYBDFNCLLAHDJOOLADTPDAGDHECKNDDWKIFTGLJLLEBDCEDPFMGWHTAYAOHDLPBKAOOYPRCPAYADCNFEIOLDPYSNWSFZVTZTNSWTMWEEHTIOAYADBGIABKDPJYKKJOIHDMIOJLJLIOJZIHHSJOINJKDMIAJLJNDLJOJPJLJYJLIAJLJZDMGHJPHSJTJKIYIHJPFXJLJTJYJPHSIAJYBGEYBKBZFPSPHKMEBYWZNSCKCKAMKIYKMUHK
UR:TRON-SIGN-REQUEST/2-2/LPAOAOCSURCYBDFNCLLAHDJOBGIHQZPEMUWDCTDIGETSLEBGBZFPHHRYTPIMDLPDUOGRUTTPPDYNNTRDFDHGDMWPATZOCSVTSWHPJOLAPDNLWTMWEEAXADAATAADDYOEADLECSDWYKCSSRYKAEYKAEWKAEWKAOCYJKSKTNBKAHGOFPSPHKMEBYWZNSCKCKAMBGIHQZPEMUWDCTDIGETSLEAMJTFWINJYGHJLJLJZCXHGHSJZJZIHJYAECEGYGWVW
a601d825505f1e9b2c7d3a4e6f8a0b1c2d3e4f5a080258850a02a1b222080123456789abcdef40e0fc9cf094345a67080112630a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e747261637412320a1541c8599111f29c1e1e061265b4af93ea1f274ad78a1215415cbdd86a2fa8dc4bddd8a8f69dba48572eec07fb18e0c65b7080a899f09434030104d90130a2018a182cf518c3f500f500f400f4021a73c5da0a055541c8599111f29c1e1e061265b4af93ea1f274ad78a066e426974546f6f6c2057616c6c6574
Respuesta (BitTool Signer → tu cartera)
{
"request-id": {
"uuid": "5f1e9b2c7d3a4e6f8a0b1c2d3e4f5a08"
},
"signature": "32c82fe12ddef67b967c836692f7a729003481e6b0f070b1ac6ee7742ac27e18611174e6a54efb7f5f5e14adfbb9118bb137f064881777316ed593ea5da4a25d01"
}
Mostrar el texto del QR y el CBOR sin procesar
UR:TRON-SIGNATURE/OEADTPDAGDHECKNDDWKIFTGLJLLEBDCEDPFMGWHTAYAOHDFPEYSPDLVYDPUEYNKGMTKELSIYMOYLOSDTAEEELYVAPFWTJOPAPSJTVDJYDRSAKBCSHSBYJYVAONGLZOLBHEHYBBPMZORHBYLUPAEMWTIELOCHKTEHJTTLMUWDHLOXOEHLADEEFEIELE
a201d825505f1e9b2c7d3a4e6f8a0b1c2d3e4f5a0802584132c82fe12ddef67b967c836692f7a729003481e6b0f070b1ac6ee7742ac27e18611174e6a54efb7f5f5e14adfbb9118bb137f064881777316ed593ea5da4a25d01
Ensamblado por tu cartera
{
"txID": "b396c11e25482bc348d39e620000ef16290d0d17b7649cb94fee63d0203695eb",
"raw_data": {
"contract": [
{
"parameter": {
"value": {
"amount": 1500000,
"owner_address": "41c8599111f29c1e1e061265b4af93ea1f274ad78a",
"to_address": "415cbdd86a2fa8dc4bddd8a8f69dba48572eec07fb"
},
"type_url": "type.googleapis.com/protocol.TransferContract"
},
"type": "TransferContract"
}
],
"ref_block_bytes": "a1b2",
"ref_block_hash": "0123456789abcdef",
"expiration": 1792310460000,
"timestamp": 1792310400000
},
"raw_data_hex": "0a02a1b222080123456789abcdef40e0fc9cf094345a67080112630a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e747261637412320a1541c8599111f29c1e1e061265b4af93ea1f274ad78a1215415cbdd86a2fa8dc4bddd8a8f69dba48572eec07fb18e0c65b7080a899f09434",
"signature": [
"32c82fe12ddef67b967c836692f7a729003481e6b0f070b1ac6ee7742ac27e18611174e6a54efb7f5f5e14adfbb9118bb137f064881777316ed593ea5da4a25d01"
]
}
Envío de 10 USDT: un TriggerSmartContract al contrato de USDT TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t con calldata transfer(address,uint256) y un límite de comisión de 30 TRX.
{
"txID": "2e5c3786422acf86e667ebfc0afcce8261407c39117d9b2c20f386064822f60b",
"raw_data": {
"contract": [
{
"parameter": {
"value": {
"data": "a9059cbb0000000000000000000000005cbdd86a2fa8dc4bddd8a8f69dba48572eec07fb0000000000000000000000000000000000000000000000000000000000989680",
"owner_address": "41c8599111f29c1e1e061265b4af93ea1f274ad78a",
"contract_address": "41a614f803b6fd780986a42c78ec9c7f77e6ded13c"
},
"type_url": "type.googleapis.com/protocol.TriggerSmartContract"
},
"type": "TriggerSmartContract"
}
],
"ref_block_bytes": "a1b2",
"ref_block_hash": "0123456789abcdef",
"expiration": 1792310460000,
"fee_limit": 30000000,
"timestamp": 1792310400000
},
"raw_data_hex": "0a02a1b222080123456789abcdef40e0fc9cf094345aae01081f12a9010a31747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e54726967676572536d617274436f6e747261637412740a1541c8599111f29c1e1e061265b4af93ea1f274ad78a121541a614f803b6fd780986a42c78ec9c7f77e6ded13c2244a9059cbb0000000000000000000000005cbdd86a2fa8dc4bddd8a8f69dba48572eec07fb00000000000000000000000000000000000000000000000000000000009896807080a899f0943490018087a70e"
}
Solicitud (tu cartera → BitTool Signer)
{
"1 request-id": {
"uuid (tag 37)": "5f1e9b2c7d3a4e6f8a0b1c2d3e4f5a09"
},
"2 sign-data": "0a02a1b222080123456789abcdef40e0fc9cf094345aae01081f12a9010a31747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e54726967676572536d617274436f6e747261637412740a1541c8599111f29c1e1e061265b4af93ea1f274ad78a121541a614f803b6fd780986a42c78ec9c7f77e6ded13c2244a9059cbb0000000000000000000000005cbdd86a2fa8dc4bddd8a8f69dba48572eec07fb00000000000000000000000000000000000000000000000000000000009896807080a899f0943490018087a70e",
"3 data-type": 1,
"4 derivation-path": {
"crypto-keypath (tag 304)": {
"1 components": [
44,
true,
195,
true,
0,
true,
0,
false,
0,
false
],
"2 source-fingerprint": 1942346250
}
},
"5 address": "41c8599111f29c1e1e061265b4af93ea1f274ad78a",
"6 origin": "BitTool Wallet"
}
Mostrar el texto del QR y el CBOR sin procesar
UR:TRON-SIGN-REQUEST/1-2/LPADAOCFADDPCYFYCYDLTOHDMSOLADTPDAGDHECKNDDWKIFTGLJLLEBDCEDPFMGWHTASAOHDTEBKAOOYPRCPAYADCNFEIOLDPYSNWSFZVTZTNSWTMWEEHTPLADAYCTBGPTADBKEHJYKKJOIHDMIOJLJLIOJZIHHSJOINJKDMIAJLJNDLJOJPJLJYJLIAJLJZDMGHJPINIOIOIHJPGUJNHSJPJYFXJLJTJYJPHSIAJYBGJYBKBZFPSPHKMEBYWZNSCKCKAMBGIHQZPEMUWDCTDIGETSLEBGBZFPOLBBYAAXRPZCKSASLNOXDWKSWPNSLBKTVAUETTJSFXCFGD
UR:TRON-SIGN-REQUEST/2-2/LPAOAOCFADDPCYFYCYDLTOHDMSFNCPFYPTAHNSRKAEAEAEAEAEAEAEAEAEAEAEAEHHRYTPIMDLPDUOGRUTTPPDYNNTRDFDHGDMWPATZOAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEMKMTLAJOLAPDNLWTMWEEMHADLALTOSBAAXADAATAADDYOEADLECSDWYKCSSRYKAEYKAEWKAEWKAOCYJKSKTNBKAHGOFPSPHKMEBYWZNSCKCKAMBGIHQZPEMUWDCTDIGETSLEAMJTFWINJYGHJLJLJZCXHGHSJZJZIHJYAESFYNZELT
a601d825505f1e9b2c7d3a4e6f8a0b1c2d3e4f5a090258d30a02a1b222080123456789abcdef40e0fc9cf094345aae01081f12a9010a31747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e54726967676572536d617274436f6e747261637412740a1541c8599111f29c1e1e061265b4af93ea1f274ad78a121541a614f803b6fd780986a42c78ec9c7f77e6ded13c2244a9059cbb0000000000000000000000005cbdd86a2fa8dc4bddd8a8f69dba48572eec07fb00000000000000000000000000000000000000000000000000000000009896807080a899f0943490018087a70e030104d90130a2018a182cf518c3f500f500f400f4021a73c5da0a055541c8599111f29c1e1e061265b4af93ea1f274ad78a066e426974546f6f6c2057616c6c6574
Respuesta (BitTool Signer → tu cartera)
{
"request-id": {
"uuid": "5f1e9b2c7d3a4e6f8a0b1c2d3e4f5a09"
},
"signature": "3a4b9d2c4b9872ee24d74a88919640d24ad760dd80399aa872844010f3b5141e7ddad3c3067f1e875c0bd18d176e8ea9995304d16395c81b98973dc55173293e01"
}
Mostrar el texto del QR y el CBOR sin procesar
UR:TRON-SIGNATURE/OEADTPDAGDHECKNDDWKIFTGLJLLEBDCEDPFMGWHTASAOHDFPFTGRNTDWGRMKJPWYDKTSGELOMEMTFZTDGETSHNUTLAESNYPDJPLRFZBEWFREBBCKKITNTESRAMLBCKLTHHBDTTLGCHJTMNPTNLGUAATTIAMDSPCWMKMSFSSKGYJKDTFMADSACKWEWN
a201d825505f1e9b2c7d3a4e6f8a0b1c2d3e4f5a090258413a4b9d2c4b9872ee24d74a88919640d24ad760dd80399aa872844010f3b5141e7ddad3c3067f1e875c0bd18d176e8ea9995304d16395c81b98973dc55173293e01
Ensamblado por tu cartera
{
"txID": "2e5c3786422acf86e667ebfc0afcce8261407c39117d9b2c20f386064822f60b",
"raw_data": {
"contract": [
{
"parameter": {
"value": {
"data": "a9059cbb0000000000000000000000005cbdd86a2fa8dc4bddd8a8f69dba48572eec07fb0000000000000000000000000000000000000000000000000000000000989680",
"owner_address": "41c8599111f29c1e1e061265b4af93ea1f274ad78a",
"contract_address": "41a614f803b6fd780986a42c78ec9c7f77e6ded13c"
},
"type_url": "type.googleapis.com/protocol.TriggerSmartContract"
},
"type": "TriggerSmartContract"
}
],
"ref_block_bytes": "a1b2",
"ref_block_hash": "0123456789abcdef",
"expiration": 1792310460000,
"fee_limit": 30000000,
"timestamp": 1792310400000
},
"raw_data_hex": "0a02a1b222080123456789abcdef40e0fc9cf094345aae01081f12a9010a31747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e54726967676572536d617274436f6e747261637412740a1541c8599111f29c1e1e061265b4af93ea1f274ad78a121541a614f803b6fd780986a42c78ec9c7f77e6ded13c2244a9059cbb0000000000000000000000005cbdd86a2fa8dc4bddd8a8f69dba48572eec07fb00000000000000000000000000000000000000000000000000000000009896807080a899f0943490018087a70e",
"signature": [
"3a4b9d2c4b9872ee24d74a88919640d24ad760dd80399aa872844010f3b5141e7ddad3c3067f1e875c0bd18d176e8ea9995304d16395c81b98973dc55173293e01"
]
}
Un mensaje de inicio de sesión. El digest de abajo es lo que cubre la firma; walletConnectResult muestra la firma con el byte de recuperación como 27/28, la forma que espera una dApp.
776428ce260fe31d65dc919f1d241a4508bef2660770202dc20c537e391ce070
Solicitud (tu cartera → BitTool Signer)
{
"1 request-id": {
"uuid (tag 37)": "5f1e9b2c7d3a4e6f8a0b1c2d3e4f5a0a"
},
"2 sign-data": "5369676e20696e20746f204578616d706c6520417070206f6e2054524f4e2e204e6f6e63653a20346339643231",
"3 data-type": 2,
"4 derivation-path": {
"crypto-keypath (tag 304)": {
"1 components": [
44,
true,
195,
true,
0,
true,
0,
false,
0,
false
],
"2 source-fingerprint": 1942346250
}
},
"5 address": "41c8599111f29c1e1e061265b4af93ea1f274ad78a",
"6 origin": "BitTool Wallet"
}
Mostrar el texto del QR y el CBOR sin procesar
UR:TRON-SIGN-REQUEST/OLADTPDAGDHECKNDDWKIFTGLJLLEBDCEDPFMGWHTBKAOHDDPGUINIOJTCXINJTCXJYJLCXFEKSHSJNJOJZIHCXFPJOJOCXJLJTCXGHGMGWGLDMCXGLJLJTIAIHFTCXEEIAESIEEYEHAXAOAATAADDYOEADLECSDWYKCSSRYKAEYKAEWKAEWKAOCYJKSKTNBKAHGOFPSPHKMEBYWZNSCKCKAMBGIHQZPEMUWDCTDIGETSLEAMJTFWINJYGHJLJLJZCXHGHSJZJZIHJYOERLBKNE
a601d825505f1e9b2c7d3a4e6f8a0b1c2d3e4f5a0a02582d5369676e20696e20746f204578616d706c6520417070206f6e2054524f4e2e204e6f6e63653a20346339643231030204d90130a2018a182cf518c3f500f500f400f4021a73c5da0a055541c8599111f29c1e1e061265b4af93ea1f274ad78a066e426974546f6f6c2057616c6c6574
Respuesta (BitTool Signer → tu cartera)
{
"request-id": {
"uuid": "5f1e9b2c7d3a4e6f8a0b1c2d3e4f5a0a"
},
"signature": "8dc0ce437fd46a9acfec62c7eb1632ab7fe6b8fb3308a629a656ece0d899968f37830d8cafa7356903bd0ca8159bc6bc41d6caac62c5613c042396769bb8aa2301"
}
Mostrar el texto del QR y el CBOR sin procesar
UR:TRON-SIGNATURE/OEADTPDAGDHECKNDDWKIFTGLJLLEBDCEDPFMGWHTBKAOHDFPLGRTTOFXLBTYIMNYTKWPIDSTWMCMEYPYLBVAROZOEOAYOLDTOLHFWPVTTPNLMTMYEMLSBTLKPEOSECINAXRYBNPDBZNDSWRFFPTBSGPSIDSKHSFNAACNMTKONDROPKCNADGYMKCHTD
a201d825505f1e9b2c7d3a4e6f8a0b1c2d3e4f5a0a0258418dc0ce437fd46a9acfec62c7eb1632ab7fe6b8fb3308a629a656ece0d899968f37830d8cafa7356903bd0ca8159bc6bc41d6caac62c5613c042396769bb8aa2301
Ensamblado por tu cartera
0x8dc0ce437fd46a9acfec62c7eb1632ab7fe6b8fb3308a629a656ece0d899968f37830d8cafa7356903bd0ca8159bc6bc41d6caac62c5613c042396769bb8aa231c
Cuentas multifirma
En una cuenta con permisos multifirma, cada miembro firma por separado:
- Pon la ruta y la dirección del miembro en las claves 4 y 5. La cuenta de
owner_addresspuede ser una dirección diferente, y BitTool Signer nunca elige un firmante solo porque aparezca como propietario o como miembro de un permiso. - Establece en el contrato el
Permission_iddel permiso que se esté usando. - BitTool Signer solo ve
raw_data. Tu cartera conserva las firmas ya reunidas, añade cada nueva, elimina los duplicados y comprueba el permiso en la cadena (miembros, pesos, umbral, operaciones) antes de difundir. El firmante no puede verificar sin conexión los permisos actuales en la cadena.