Beitrag
Teile dein Wissen.
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
Antworten
2Es scheint, dass es ein Problem mit der Bestellung oder dem Unterzeichnen der Transaktion gibt. Stellen Sie sicher, dass Sie die Transaktion korrekt erstellen und dann die serialisierte Transaktion signieren. Hier ist ein Beispielcode, der helfen könnte:
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);
}
Vergewissern Sie sich, dass die Signaturen beim Senden der Transaktion ordnungsgemäß und in der richtigen Reihenfolge behandelt werden. Die Fehlermeldung weist darauf hin, dass möglicherweise ein Problem mit der Datenformatierung oder eine Kommunikationslücke in der Art und Weise, wie die Transaktion serialisiert und signiert wird, vorliegt.
Weißt du die Antwort?
Bitte melde dich an und teile sie.
Move is an executable bytecode language used to implement custom transactions and smart contracts.