Keyless Accounts with Sponsored Transactions - INVALID_SIGNATURE Issues #754
Unanswered
caesar4321
asked this question in
Questions
Replies: 2 comments 1 reply
-
There is a serialization issue going on somewhere as per the error logs. Unclear exactly where this issue is happening without further inspection. Will provide a sample shortly. |
Beta Was this translation helpful? Give feedback.
0 replies
-
Try running this example below. It shows how to serialize and deserialize correctly. /* eslint-disable max-len */
/* eslint-disable no-console */
/**
* This example shows how to use the Keyless accounts on Aptos
*/
import { Account, AccountAuthenticator, Aptos, APTOS_COIN, AptosConfig, Deserializer, EphemeralKeyPair, Network, SimpleTransaction } from "@aptos-labs/ts-sdk";
import * as readlineSync from "readline-sync";
const INITIAL_BALANCE = 100_000_000;
const TRANSFER_AMOUNT = 10_000;
const example = async () => {
// Set up the client
const network = Network.DEVNET;
const config = new AptosConfig({ network });
const aptos = new Aptos(config);
// Generate the ephemeral (temporary) key pair that will be used to sign transactions.
const aliceEphem = EphemeralKeyPair.generate();
console.log("\n=== Keyless Account Example ===\n");
const link = `https://accounts.google.com/o/oauth2/v2/auth/oauthchooseaccount?redirect_uri=https%3A%2F%2Fdevelopers.google.com%2Foauthplayground&prompt=consent&response_type=code&client_id=407408718192.apps.googleusercontent.com&scope=openid&access_type=offline&service=lso&o2v=2&theme=glif&flowName=GeneralOAuthFlow&nonce=${aliceEphem.nonce}`;
console.log(`${link}\n`);
console.log("1. Open the link above");
console.log("2. Log in with your Google account");
console.log("3. Click 'Exchange authorization code for tokens'");
console.log("4. Copy the 'id_token' - (toggling 'Wrap lines' option at the bottom makes this easier)\n");
function inputJwt(): string {
return readlineSync.question("Paste the JWT (id_token) token here and press enter: ", {
hideEchoBack: false,
});
}
const jwt = inputJwt();
// Derive the Keyless Account from the JWT and ephemeral key pair.
const alice = await aptos.deriveKeylessAccount({
jwt,
ephemeralKeyPair: aliceEphem,
});
console.log("=== Addresses ===\n");
console.log(`Alice's keyless account address is: ${alice.accountAddress}`);
console.log(`Alice's nonce is: ${aliceEphem.nonce}`);
console.log(`Alice's ephemeral public key is: ${aliceEphem.getPublicKey().toString()}`);
const bob = Account.generate();
console.log(`Bob's address is: ${bob.accountAddress}`);
// Fund the accounts
console.log("\n=== Funding accounts ===\n");
await aptos.fundAccount({
accountAddress: alice.accountAddress,
amount: INITIAL_BALANCE,
});
await aptos.fundAccount({
accountAddress: bob.accountAddress,
amount: INITIAL_BALANCE,
options: { waitForIndexer: false },
});
// Transfer between users
const transaction = await aptos.transaction.build.simple({
sender: alice.accountAddress,
data: {
function: "0x1::coin::transfer",
typeArguments: [APTOS_COIN],
functionArguments: [bob.accountAddress, TRANSFER_AMOUNT],
},
withFeePayer: true,
});
const sponsorAuthenticator = aptos.transaction.signAsFeePayer({
signer: bob,
transaction
});
const sponsorAuthenticatorSerialized = await sponsorAuthenticator.toString();
// Use .toString() to get the hex representation of the transaction
const txnSerialized = transaction.toString();
const deserializedTxn = SimpleTransaction.deserialize(Deserializer.fromHex(txnSerialized));
const senderAuthenticator = alice.signTransactionWithAuthenticator(deserializedTxn)
const senderAuthenticatorSerialized = await senderAuthenticator.toString();
console.log({
txnSerialized,
senderAuthenticatorSerialized,
sponsorAuthenticatorSerialized
});
const committedTxn = await aptos.transaction.submit.simple({
senderAuthenticator: AccountAuthenticator.deserialize(Deserializer.fromHex(senderAuthenticatorSerialized)),
feePayerAuthenticator: AccountAuthenticator.deserialize(Deserializer.fromHex(sponsorAuthenticatorSerialized)),
transaction: deserializedTxn
});
await aptos.waitForTransaction({ transactionHash: committedTxn.hash });
console.log(`\nCommitted transaction:\nhttps://explorer.aptoslabs.com/txn/${committedTxn.hash}?network=${network}`);
};
example();
|
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Discord user ID
julianmoonluna
Describe your question in detail.
Need Help: Keyless Accounts with Sponsored Transactions - INVALID_SIGNATURE Issues
Problem Summary
We're implementing a two-phase sponsored transaction flow where:
However, we consistently get
INVALID_SIGNATURE
errors despite extensive debugging.Our Architecture
Flow Overview
signWithAuthenticator()
Current Implementation
Phase 1: Prepare Transaction
Phase 2: Client Signing
Phase 3: Submit Transaction
Problems Encountered
1. INVALID_SIGNATURE Errors
Every transaction submission fails with:
2. BCS Deserialization Issues
Manual submission attempts fail with:
3. Transaction Format Questions
transaction.rawTransaction.bcsToBytes()
(includes fee payer) or something else?What We've Tried
Key Questions
Signing Message: For sponsored transactions with keyless accounts, what exactly should the sender sign?
SDK Pattern: Is there a recommended pattern for keyless + sponsored transactions?
buildSponsoredTransaction()
differently?Transaction Structure: How should the final transaction be constructed?
signAsFeePayer()
for the sponsor?submit.simple()
the right method for this flow?Environment
@aptos-labs/ts-sdk
latestSample Transaction Data
Request for Help
We'd greatly appreciate:
Any insights or sample code would be incredibly helpful! We've been stuck on this for quite some time and are running out of ideas.
Repository
Our implementation is available at: [https://github.com/caesar4321/Confio]
Thank you for any assistance! 🙏
What error, if any, are you getting?
info: Sponsor account initialized: {"0":"0","1":"x","10":"c","11":"1","12":"9","13":"8","14":"d","15":"c","16":"e","17":"d","18":"f","19":"7","2":"7","20":"6","21":"6","22":"e","23":"0","24":"d","25":"2","26":"a","27":"3","28":"9","29":"8","3":"5","30":"4","31":"7","32":"f","33":"9","34":"b","35":"2","36":"6","37":"9","38":"0","39":"5","4":"f","40":"2","41":"0","42":"2","43":"4","44":"e","45":"9","46":"4","47":"3","48":"c","49":"5","5":"3","50":"8","51":"9","52":"7","53":"0","54":"8","55":"5","56":"4","57":"b","58":"9","59":"c","6":"8","60":"b","61":"7","62":"0","63":"e","64":"2","65":"c","7":"a","8":"e","9":"0","service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:11:56.049Z"}
[Aptos SDK] It is recommended that private keys are AIP-80 compliant (https://github.com/aptos-foundation/AIPs/blob/main/aips/aip-80.md). You can fix the private key by formatting it with
PrivateKey.formatPrivateKey(privateKey: string, type: 'ed25519' | 'secp256k1'): string
.info: KeylessServiceV2 initialized {"service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:11:56.052Z"}
info: Sponsor address: {"0":"0","1":"x","10":"c","11":"1","12":"9","13":"8","14":"d","15":"c","16":"e","17":"d","18":"f","19":"7","2":"7","20":"6","21":"6","22":"e","23":"0","24":"d","25":"2","26":"a","27":"3","28":"9","29":"8","3":"5","30":"4","31":"7","32":"f","33":"9","34":"b","35":"2","36":"6","37":"9","38":"0","39":"5","4":"f","40":"2","41":"0","42":"2","43":"4","44":"e","45":"9","46":"4","47":"3","48":"c","49":"5","5":"3","50":"8","51":"9","52":"7","53":"0","54":"8","55":"5","56":"4","57":"b","58":"9","59":"c","6":"8","60":"b","61":"7","62":"0","63":"e","64":"2","65":"c","7":"a","8":"e","9":"0","service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:11:56.053Z"}
info: Using RPC endpoint: {"0":"N","1":"o","2":"d","3":"i","4":"t","5":" ","6":"A","7":"P","8":"I","service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:11:56.053Z"}
info: Aptos Keyless Bridge running on port 3333 {"service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:11:56.054Z"}
info: Network: testnet {"service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:11:56.055Z"}
info: Environment: development {"service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:11:56.055Z"}
info: POST /api/keyless/v2/prepare-sponsored-confio-transfer {"body":{"amount":111000000,"recipientAddress":"0x2b4efedb3d02b5546cd1473053ba8f65c07e04452cd1fa7383cc552d38b26c36","senderAddress":"0xb5c85a6044403766e5d32e93b6543a3712a8648a040385bf33283d5c55508f1c"},"ip":"::1","query":{},"service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:01.687Z"}
info: Preparing sponsored CONFIO transfer {"service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:01.688Z"}
info: Building sponsored transaction with request: {"amount":111000000,"recipient":"0x2b4efedb3d02b5546cd1473053ba8f65c07e04452cd1fa7383cc552d38b26c36","sender":"0xb5c85a6044403766e5d32e93b6543a3712a8648a040385bf33283d5c55508f1c","service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:01.688Z","tokenType":"CONFIO"}
info: Transaction built successfully {"service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:04.751Z"}
info: Transaction rawTransaction exists: {"service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:04.751Z"}
info: Transaction fee payer: {"0":"0","1":"x","2":"0","service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:04.751Z"}
info: Transaction structure: {"hasFeePayerAddress":true,"hasRawTransaction":true,"rawTxnLength":165,"service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:04.756Z"}
info: Transaction built successfully {"service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:04.756Z"}
info: Raw transaction length: {"service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:04.756Z"}
info: Transaction ID: {"0":"M","1":"C","10":"Y","11":"w","12":"N","13":"j","14":"g","15":"y","2":"4","3":"w","4":"N","5":"z","6":"k","7":"z","8":"M","9":"D","service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:04.756Z"}
info: Fee payer address in transaction: {"0":"0","1":"x","10":"c","11":"1","12":"9","13":"8","14":"d","15":"c","16":"e","17":"d","18":"f","19":"7","2":"7","20":"6","21":"6","22":"e","23":"0","24":"d","25":"2","26":"a","27":"3","28":"9","29":"8","3":"5","30":"4","31":"7","32":"f","33":"9","34":"b","35":"2","36":"6","37":"9","38":"0","39":"5","4":"f","40":"2","41":"0","42":"2","43":"4","44":"e","45":"9","46":"4","47":"3","48":"c","49":"5","5":"3","50":"8","51":"9","52":"7","53":"0","54":"8","55":"5","56":"4","57":"b","58":"9","59":"c","6":"8","60":"b","61":"7","62":"0","63":"e","64":"2","65":"c","7":"a","8":"e","9":"0","service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:04.756Z"}
info: POST /api/keyless/v2/submit-sponsored-confio-transfer {"body":{"senderAuthenticator":"AgMbaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tIHI+xGpLxxPSRZUIC2yCuv/W+vlLfk5YW7AeFWvhMTUVAwAA39G8uDkAxVUk4kmkCKQE9XF2SRxrMHAwwLT8CA8O14Xl6A/UHweND3da73b054W2QgAN2obVgI4flBxI//6wDdd+jywcAZNgivunSfWh+fBY539bCoKiZkSucF5BHvseETrPklWgDHi2QrEPZkko31FZ0BICikqqNEB92sKfyqmAlpgAAAAAAAAAAQBAN0sKpRPur1Uke/2Frtyyuhe0UD0seSgzG/aM7F4M7T/0Vml++F+edr1wYLGK5rjxaPzL5RKwkFfni56E2lUCDkx7ImFsZyI6IlJTMjU2Iiwia2lkIjoiYmE2M2I0MzY4MzZhOTM5Yjc5NWI0MTIyZDNmNGQwZDIyNWQxYzcwMCIsInR5cCI6IkpXVCJ9ABClaAAAAAAAICD1PvWq8LtG4+CHGDdra3b7uOldLUs6K263cmbGpKSdAEBW5ziLVKAFv0W9kc2rkq75F0fmW3wvc7vceurwgf62tp9tcJs7LWbfbNTR6VT4J2NWua6PmCZZZLTymzcS6uYM","transactionId":"MC4wNzkzMDYwNjgy"},"ip":"::1","query":{},"service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:09.229Z"}
info: Submitting sponsored transaction: {"0":"M","1":"C","10":"Y","11":"w","12":"N","13":"j","14":"g","15":"y","2":"4","3":"w","4":"N","5":"z","6":"k","7":"z","8":"M","9":"D","service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:09.230Z"}
info: Using cached transaction from prepare phase {"service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:09.230Z"}
info: Submitting cached transaction: {"0":"M","1":"C","10":"Y","11":"w","12":"N","13":"j","14":"g","15":"y","2":"4","3":"w","4":"N","5":"z","6":"k","7":"z","8":"M","9":"D","service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:09.230Z"}
info: Cached transaction exists: {"service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:09.230Z"}
info: Cached sponsor authenticator exists: {"service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:09.230Z"}
info: Transaction rawTransaction exists: {"service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:09.230Z"}
info: Transaction fee payer: {"0":"0","1":"x","10":"c","11":"1","12":"9","13":"8","14":"d","15":"c","16":"e","17":"d","18":"f","19":"7","2":"7","20":"6","21":"6","22":"e","23":"0","24":"d","25":"2","26":"a","27":"3","28":"9","29":"8","3":"5","30":"4","31":"7","32":"f","33":"9","34":"b","35":"2","36":"6","37":"9","38":"0","39":"5","4":"f","40":"2","41":"0","42":"2","43":"4","44":"e","45":"9","46":"4","47":"3","48":"c","49":"5","5":"3","50":"8","51":"9","52":"7","53":"0","54":"8","55":"5","56":"4","57":"b","58":"9","59":"c","6":"8","60":"b","61":"7","62":"0","63":"e","64":"2","65":"c","7":"a","8":"e","9":"0","service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:09.230Z"}
info: Sender authenticator bytes length: {"service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:09.230Z"}
info: Sender authenticator deserialized successfully {"service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:09.231Z"}
info: Attempting manual transaction submission {"service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:09.231Z"}
info: Signed transaction bytes length: {"service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:09.231Z"}
error: Manual submission failed: {"0":"{","1":""","10":":","100":"i","101":"n","102":" ","103":"t","104":"h","105":"e","106":" ","107":"t","108":"a","109":"r","11":""","110":"g","111":"e","112":"t","113":" ","114":"s","115":"i","116":"z","117":"e","118":""","119":",","12":"F","120":""","121":"e","122":"r","123":"r","124":"o","125":"r","126":"","127":"c","128":"o","129":"d","13":"a","130":"e","131":""","132":":","133":""","134":"i","135":"n","136":"v","137":"a","138":"l","139":"i","14":"i","140":"d","141":"","142":"i","143":"n","144":"p","145":"u","146":"t","147":""","148":",","149":""","15":"l","150":"v","151":"m","152":"","153":"e","154":"r","155":"r","156":"o","157":"r","158":"","159":"c","16":"e","160":"o","161":"d","162":"e","163":""","164":":","165":"n","166":"u","167":"l","168":"l","169":"}","17":"d","18":" ","19":"t","2":"m","20":"o","21":" ","22":"d","23":"e","24":"s","25":"e","26":"r","27":"i","28":"a","29":"l","3":"e","30":"i","31":"z","32":"e","33":" ","34":"i","35":"n","36":"p","37":"u","38":"t","39":" ","4":"s","40":"i","41":"n","42":"t","43":"o","44":" ","45":"S","46":"i","47":"g","48":"n","49":"e","5":"s","50":"d","51":"T","52":"r","53":"a","54":"n","55":"s","56":"a","57":"c","58":"t","59":"i","6":"a","60":"o","61":"n","62":":","63":" ","64":"U","65":"L","66":"E","67":"B","68":"1","69":"2","7":"g","70":"8","71":"-","72":"e","73":"n","74":"c","75":"o","76":"d","77":"e","78":"d","79":" ","8":"e","80":"i","81":"n","82":"t","83":"e","84":"g","85":"e","86":"r","87":" ","88":"d","89":"i","9":""","90":"d","91":" ","92":"n","93":"o","94":"t","95":" ","96":"f","97":"i","98":"t","99":" ","service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:10.314Z"}
error: Manual submission error: Manual submission failed: {"message":"Failed to deserialize input into SignedTransaction: ULEB128-encoded integer did not fit in the target size","error_code":"invalid_input","vm_error_code":null} {"service":"aptos-keyless-bridge","stack":"Error: Manual submission failed: {"message":"Failed to deserialize input into SignedTransaction: ULEB128-encoded integer did not fit in the target size","error_code":"invalid_input","vm_error_code":null}\n at KeylessServiceV2.submitCachedTransaction (/Users/julian/Confio/aptos-keyless-bridge/dist/services/keylessServiceV2.js:265:27)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async /Users/julian/Confio/aptos-keyless-bridge/dist/routes/keylessV2.js:253:24","timestamp":"2025-08-06T01:12:10.315Z"}
info: Falling back to SDK submission {"service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:10.316Z"}
info: About to submit transaction with: {"service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:10.316Z"}
info: - Transaction type: {"0":"n","service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:10.316Z"}
info: - Has rawTransaction: {"service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:10.316Z"}
info: - Sender authenticator type: {"0":"n","service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:10.316Z"}
info: - Fee payer authenticator type: {"0":"n","service":"aptos-keyless-bridge","timestamp":"2025-08-06T01:12:10.316Z"}
error: Error submitting cached transaction: Request to [Fullnode]: POST https://aptos-testnet.nodit.io/v1/transactions failed with: {"message":"Invalid transaction: Type: Validation Code: INVALID_SIGNATURE","error_code":"vm_error","vm_error_code":1} {"data":{"error_code":"vm_error","message":"Invalid transaction: Type: Validation Code: INVALID_SIGNATURE","vm_error_code":1},"name":"AptosApiError","request":{"body":{"0":181,"1":200,"2":90,"3":96,"4":68,"5":64,"6":55,"7":102,"8":229,"9":211,"10":46,"11":147,"12":182,"13":84,"14":58,"15":55,"16":18,"17":168,"18":100,"19":138,"20":4,"21":3,"22":133,"23":191,"24":51,"25":40,"26":61,"27":92,"28":85,"29":80,"30":143,"31":28,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":2,"41":117,"42":243,"43":138,"44":224,"45":193,"46":152,"47":220,"48":237,"49":247,"50":102,"51":224,"52":210,"53":163,"54":152,"55":71,"56":249,"57":178,"58":105,"59":5,"60":32,"61":36,"62":233,"63":67,"64":197,"65":137,"66":112,"67":133,"68":75,"69":156,"70":183,"71":14,"72":44,"73":6,"74":99,"75":111,"76":110,"77":102,"78":105,"79":111,"80":15,"81":116,"82":114,"83":97,"84":110,"85":115,"86":102,"87":101,"88":114,"89":95,"90":99,"91":111,"92":110,"93":102,"94":105,"95":111,"96":0,"97":2,"98":32,"99":43,"100":78,"101":254,"102":219,"103":61,"104":2,"105":181,"106":84,"107":108,"108":209,"109":71,"110":48,"111":83,"112":186,"113":143,"114":101,"115":192,"116":126,"117":4,"118":69,"119":44,"120":209,"121":250,"122":115,"123":131,"124":204,"125":85,"126":45,"127":56,"128":178,"129":108,"130":54,"131":8,"132":192,"133":185,"134":157,"135":6,"136":0,"137":0,"138":0,"139":0,"140":64,"141":13,"142":3,"143":0,"144":0,"145":0,"146":0,"147":0,"148":100,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":248,"157":171,"158":146,"159":104,"160":0,"161":0,"162":0,"163":0,"164":2,"165":3,"166":2,"167":3,"168":27,"169":104,"170":116,"171":116,"172":112,"173":115,"174":58,"175":47,"176":47,"177":97,"178":99,"179":99,"180":111,"181":117,"182":110,"183":116,"184":115,"185":46,"186":103,"187":111,"188":111,"189":103,"190":108,"191":101,"192":46,"193":99,"194":111,"195":109,"196":32,"197":114,"198":62,"199":196,"200":106,"201":75,"202":199,"203":19,"204":210,"205":69,"206":149,"207":8,"208":11,"209":108,"210":130,"211":186,"212":255,"213":214,"214":250,"215":249,"216":75,"217":126,"218":78,"219":88,"220":91,"221":176,"222":30,"223":21,"224":107,"225":225,"226":49,"227":53,"228":21,"229":3,"230":0,"231":0,"232":223,"233":209,"234":188,"235":184,"236":57,"237":0,"238":197,"239":85,"240":36,"241":226,"242":73,"243":164,"244":8,"245":164,"246":4,"247":245,"248":113,"249":118,"250":73,"251":28,"252":107,"253":48,"254":112,"255":48,"256":192,"257":180,"258":252,"259":8,"260":15,"261":14,"262":215,"263":133,"264":229,"265":232,"266":15,"267":212,"268":31,"269":7,"270":141,"271":15,"272":119,"273":90,"274":239,"275":118,"276":244,"277":231,"278":133,"279":182,"280":66,"281":0,"282":13,"283":218,"284":134,"285":213,"286":128,"287":142,"288":31,"289":148,"290":28,"291":72,"292":255,"293":254,"294":176,"295":13,"296":215,"297":126,"298":143,"299":44,"300":28,"301":1,"302":147,"303":96,"304":138,"305":251,"306":167,"307":73,"308":245,"309":161,"310":249,"311":240,"312":88,"313":231,"314":127,"315":91,"316":10,"317":130,"318":162,"319":102,"320":68,"321":174,"322":112,"323":94,"324":65,"325":30,"326":251,"327":30,"328":17,"329":58,"330":207,"331":146,"332":85,"333":160,"334":12,"335":120,"336":182,"337":66,"338":177,"339":15,"340":102,"341":73,"342":40,"343":223,"344":81,"345":89,"346":208,"347":18,"348":2,"349":138,"350":74,"351":170,"352":52,"353":64,"354":125,"355":218,"356":194,"357":159,"358":202,"359":169,"360":128,"361":150,"362":152,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":1,"371":0,"372":64,"373":55,"374":75,"375":10,"376":165,"377":19,"378":238,"379":175,"380":85,"381":36,"382":123,"383":253,"384":133,"385":174,"386":220,"387":178,"388":186,"389":23,"390":180,"391":80,"392":61,"393":44,"394":121,"395":40,"396":51,"397":27,"398":246,"399":140,"400":236,"401":94,"402":12,"403":237,"404":63,"405":244,"406":86,"407":105,"408":126,"409":248,"410":95,"411":158,"412":118,"413":189,"414":112,"415":96,"416":177,"417":138,"418":230,"419":184,"420":241,"421":104,"422":252,"423":203,"424":229,"425":18,"426":176,"427":144,"428":87,"429":231,"430":139,"431":158,"432":132,"433":218,"434":85,"435":2,"436":14,"437":76,"438":123,"439":34,"440":97,"441":108,"442":103,"443":34,"444":58,"445":34,"446":82,"447":83,"448":50,"449":53,"450":54,"451":34,"452":44,"453":34,"454":107,"455":105,"456":100,"457":34,"458":58,"459":34,"460":98,"461":97,"462":54,"463":51,"464":98,"465":52,"466":51,"467":54,"468":56,"469":51,"470":54,"471":97,"472":57,"473":51,"474":57,"475":98,"476":55,"477":57,"478":53,"479":98,"480":52,"481":49,"482":50,"483":50,"484":100,"485":51,"486":102,"487":52,"488":100,"489":48,"490":100,"491":50,"492":50,"493":53,"494":100,"495":49,"496":99,"497":55,"498":48,"499":48,"500":34,"501":44,"502":34,"503":116,"504":121,"505":112,"506":34,"507":58,"508":34,"509":74,"510":87,"511":84,"512":34,"513":125,"514":0,"515":16,"516":165,"517":104,"518":0,"519":0,"520":0,"521":0,"522":0,"523":32,"524":32,"525":245,"526":62,"527":245,"528":170,"529":240,"530":187,"531":70,"532":227,"533":224,"534":135,"535":24,"536":55,"537":107,"538":107,"539":118,"540":251,"541":184,"542":233,"543":93,"544":45,"545":75,"546":58,"547":43,"548":110,"549":183,"550":114,"551":102,"552":198,"553":164,"554":164,"555":157,"556":0,"557":64,"558":86,"559":231,"560":56,"561":139,"562":84,"563":160,"564":5,"565":191,"566":69,"567":189,"568":145,"569":205,"570":171,"571":146,"572":174,"573":249,"574":23,"575":71,"576":230,"577":91,"578":124,"579":47,"580":115,"581":187,"582":220,"583":122,"584":234,"585":240,"586":129,"587":254,"588":182,"589":182,"590":159,"591":109,"592":112,"593":155,"594":59,"595":45,"596":102,"597":223,"598":108,"599":212,"600":209,"601":233,"602":84,"603":248,"604":39,"605":99,"606":86,"607":185,"608":174,"609":143,"610":152,"611":38,"612":89,"613":100,"614":180,"615":242,"616":155,"617":55,"618":18,"619":234,"620":230,"621":12,"622":0,"623":0,"624":117,"625":243,"626":138,"627":224,"628":193,"629":152,"630":220,"631":237,"632":247,"633":102,"634":224,"635":210,"636":163,"637":152,"638":71,"639":249,"640":178,"641":105,"642":5,"643":32,"644":36,"645":233,"646":67,"647":197,"648":137,"649":112,"650":133,"651":75,"652":156,"653":183,"654":14,"655":44,"656":0,"657":32,"658":52,"659":59,"660":184,"661":161,"662":35,"663":226,"664":226,"665":145,"666":164,"667":204,"668":175,"669":73,"670":74,"671":12,"672":202,"673":82,"674":82,"675":103,"676":152,"677":80,"678":190,"679":13,"680":77,"681":176,"682":225,"683":181,"684":70,"685":103,"686":63,"687":222,"688":245,"689":176,"690":64,"691":93,"692":49,"693":244,"694":168,"695":28,"696":215,"697":27,"698":124,"699":89,"700":121,"701":93,"702":1,"703":180,"704":242,"705":75,"706":149,"707":107,"708":42,"709":90,"710":154,"711":66,"712":230,"713":87,"714":113,"715":147,"716":92,"717":20,"718":83,"719":113,"720":186,"721":224,"722":160,"723":225,"724":147,"725":152,"726":103,"727":206,"728":137,"729":117,"730":26,"731":208,"732":54,"733":180,"734":1,"735":87,"736":164,"737":187,"738":209,"739":150,"740":9,"741":118,"742":221,"743":111,"744":31,"745":8,"746":16,"747":242,"748":55,"749":62,"750":51,"751":55,"752":30,"753":219,"754":1},"contentType":"application/x.aptos.signed_transaction+bcs","method":"POST","originMethod":"submitTransaction","overrides":{"HEADERS":{"X-API-KEY":"eZtceGTjDqSO2uDH2EKJHuB2Wcpi0iob"}},"path":"transactions","url":"https://aptos-testnet.nodit.io/v1"},"service":"aptos-keyless-bridge","stack":"AptosApiError: Request to [Fullnode]: POST https://aptos-testnet.nodit.io/v1/transactions failed with: {"message":"Invalid transaction: Type: Validation Code: INVALID_SIGNATURE","error_code":"vm_error","vm_error_code":1}\n at ur (/Users/julian/Confio/aptos-keyless-bridge/node_modules/@aptos-labs/ts-sdk/dist/common/index.js:6:2793)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Fn (/Users/julian/Confio/aptos-keyless-bridge/node_modules/@aptos-labs/ts-sdk/dist/common/index.js:477:27851)\n at async KeylessServiceV2.submitCachedTransaction (/Users/julian/Confio/aptos-keyless-bridge/dist/services/keylessServiceV2.js:285:36)\n at async /Users/julian/Confio/aptos-keyless-bridge/dist/routes/keylessV2.js:253:24","status":400,"statusText":"Bad Request","timestamp":"2025-08-06T01:12:10.603Z","url":"https://aptos-testnet.nodit.io/v1/transactions"}
What have you tried or looked at? Or how can we reproduce the error?
No response
Which operating system are you using?
macOS
Which SDK or tool are you using? (if any)
TypeScript SDK
Describe your environment or tooling in detail
Python Django for the app server, Aptos TypeScript SDK for bridge micro server and embedded in React Native
Beta Was this translation helpful? Give feedback.
All reactions