繁体   English   中英

为什么 Solana RPC write Transaction 无法正确清理帐户偏移量?

[英]Why Solana RPC write Transaction failed to sanitize accounts offsets correctly?

我试图复制我的代币交换交易。 我得到一个错误:

solana.rpc.core.RPCException: {'code': -32602, 'message': 'invalid transaction: Transaction failed to sanitize account offsets correct'}

交易成功 - https://solscan.io/tx/5yL5MnDyLmDGu3xeR4gz8y3pJWGg5qXTzxMgd9qUPgYsPQ5ZUPkJt1DVHkmRAoqZUenHtDqgb4vsfkC1P2vjmKW9

代码:

from solana.transaction import AccountMeta, Transaction, TransactionInstruction
from solana.rpc.types import TxOpts
from solana.account import Account
from solana.rpc.api import Client
from solana.publickey import PublicKey
from solana.rpc.commitment import Recent, Root
from solana.keypair import Keypair
import base58
from spl.token.instructions import transfer, TransferParams

url = 'https://api.mainnet-beta.solana.com'
client = Client(url)

txn = Transaction(recent_blockhash=client.get_recent_blockhash()['result']['value']['blockhash'], fee_payer='8noB4Wv7rpUsz17eRD833G7VHnnmfp1JdstyXzuDvfoY')


byte_array = base58.b58decode('myprivatekey')
keypair = list(map(lambda b: int(str(b)), byte_array))[:]

account = Keypair(keypair[0:32])

txn.add(
    TransactionInstruction(
        keys=[
            AccountMeta(pubkey=PublicKey('6vdR9SgRuBtdiR6rgpXLcdjQgV7Ja7GtjqjL5EP3uQwK'), is_signer=False, is_writable=True),
            AccountMeta(pubkey=PublicKey('8noB4Wv7rpUsz17eRD833G7VHnnmfp1JdstyXzuDvfoY'), is_signer=True, is_writable=True),
            AccountMeta(pubkey=PublicKey('Dv3UEMWoX4zwviYDG1ZpdBNiNjmUbkoAmohZLPar3oyA'), is_signer=False, is_writable=True),
            AccountMeta(pubkey=PublicKey('2vfgEPJStq761qrkyh8xedrj9zpew1GQ8CobjtQ4wtyM'), is_signer=False, is_writable=False),
            AccountMeta(pubkey=PublicKey('2x3yujqB7LCMdCxV7fiZxPZStNy7RTYqWLSvnqtqjHR6'), is_signer=False, is_writable=True),
            AccountMeta(pubkey=PublicKey('2x3yujqB7LCMdCxV7fiZxPZStNy7RTYqWLSvnqtqjHR6'), is_signer=False, is_writable=True),
            AccountMeta(pubkey=PublicKey('6UzTmTpFt8pEbdAnstJrusWU1eWggPrNRsyjr9XaPVTX'), is_signer=False, is_writable=True),
            AccountMeta(pubkey=PublicKey('JD8dd73w3JigdsS7rKCqpVzFhzRXZcK2evZzxFURd21x'), is_signer=False, is_writable=True),
            AccountMeta(pubkey=PublicKey('FoXyMu5xwXre7zEoSvzViRk3nGawHUp9kUh97y2NDhcq'), is_signer=False, is_writable=True),
            AccountMeta(pubkey=PublicKey('2GUvz8bAtoeartcAPYifiBWjSVobjEF7jp7uC2cELMCx'), is_signer=False, is_writable=True),
            AccountMeta(pubkey=PublicKey('ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'), is_signer=False, is_writable=False),
            AccountMeta(pubkey=PublicKey('TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'), is_signer=False, is_writable=False),
            AccountMeta(pubkey=PublicKey('11111111111111111111111111111111'), is_signer=False, is_writable=False),
            AccountMeta(pubkey=PublicKey('SysvarRent111111111111111111111111111111111'), is_signer=False, is_writable=False),
            
        ],
        program_id=PublicKey('8BYmYs3zsBhftNELJdiKsCN2WyCBbrTwXd6WG4AFPr6n'),
        data=bytes.fromhex('5052c1c9d81b46b801000000000000001027000000000000')
    )
)


inner_instruction_transfer = txn.add(transfer(TransferParams(
    amount=1,
    dest='JD8dd73w3JigdsS7rKCqpVzFhzRXZcK2evZzxFURd21x',
    owner='6vdR9SgRuBtdiR6rgpXLcdjQgV7Ja7GtjqjL5EP3uQwK',
    program_id='TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA',
    source='6UzTmTpFt8pEbdAnstJrusWU1eWggPrNRsyjr9XaPVTX',
)))


from solana.system_program import TransferParams, transfer
inner_instruction_sol_transfer = txn.add(transfer(TransferParams(from_pubkey='8noB4Wv7rpUsz17eRD833G7VHnnmfp1JdstyXzuDvfoY', to_pubkey='Dv3UEMWoX4zwviYDG1ZpdBNiNjmUbkoAmohZLPar3oyA', lamports=9800)))

inner_instruction_sol_transfer2 = txn.add(transfer(TransferParams(from_pubkey='8noB4Wv7rpUsz17eRD833G7VHnnmfp1JdstyXzuDvfoY', to_pubkey='2x3yujqB7LCMdCxV7fiZxPZStNy7RTYqWLSvnqtqjHR6', lamports=200)))



txn.sign(account)
rpc_response = client.send_transaction(
    txn,
    account,
    opts=TxOpts(skip_preflight=True, skip_confirmation=False)
)

print(rpc_response)

问题将来自您添加的第二条指令:

inner_instruction_transfer = txn.add(transfer(TransferParams(
    amount=1,
    dest='JD8dd73w3JigdsS7rKCqpVzFhzRXZcK2evZzxFURd21x',
    owner='6vdR9SgRuBtdiR6rgpXLcdjQgV7Ja7GtjqjL5EP3uQwK',
    program_id='TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA',
    source='6UzTmTpFt8pEbdAnstJrusWU1eWggPrNRsyjr9XaPVTX',
)))

第二条指令中的帐户所有者6vdR9SgRuBtdiR6rgpXLcdjQgV7Ja7GtjqjL5EP3uQwK必须签署此交易才能使其有效。 目前,只有account正在签名,我猜是8noB4Wv7rpUsz17eRD833G7VHnnmfp1JdstyXzuDvfoY

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM