Publicación
Comparte tu conocimiento.
Why does sponsored transaction fail with JsonRpcError?
I've been working on creating a sponsored transaction. I first create and sign the transaction with the gas sponsor and then the sender. But when I send it to the blockchain, I get a JsonRpcError: Deserialization error. Oddly enough, if I sign it without a sponsor, it works fine. Can anyone help me figure out what's going wrong with the sponsored transaction setup?
- Move CLI
- Move
Respuestas
2Parece que puede haber un problema con el pedido o con el proceso de firma de la transacción. Asegúrate de crear la transacción correctamente y, a continuación, de firmar la transacción serializada. Este es un ejemplo de código que puede ayudar:
async function signSerializedTransaction({
signer,
serializedTransaction,
}: {
signer: Keypair;
serializedTransaction: string;
}) {
const txBytes = fromB64(serializedTransaction);
const signatureWithBytes = await signer.signTransaction(txBytes);
return signatureWithBytes.signature;
}
async function run() {
const client = new SuiClient({ url: FULLNODE_URL });
const tx = ...;
...
tx.setSender(USER_KEYPAIR.toSuiAddress());
tx.setGasOwner(SPONS_KEYPAIR.toSuiAddress());
const txBytes = await tx.build({ client });
const txSerialized = toB64(txBytes);
const userSignature = await signSerializedTransaction({
signer: USER_KEYPAIR,
serializedTransaction: txSerialized,
});
const sponsorSignature = await signSerializedTransaction({
signer: SPONS_KEYPAIR,
serializedTransaction: txSerialized,
});
const resp = await client.executeTransactionBlock({
transactionBlock: txBytes,
signature: [userSignature, sponsorSignature],
options: {
showObjectChanges: true,
showEffects: true,
showBalanceChanges: true,
},
});
console.log(resp);
}
Asegúrese de que las firmas se manejan correctamente y están en el orden correcto al enviar la transacción. El mensaje de error indica que puede haber un problema de formato de datos o una brecha de comunicación en la forma en que se serializa y firma la transacción.
Sabes la respuesta?
Inicie sesión y compártalo.
Move is an executable bytecode language used to implement custom transactions and smart contracts.