0

ある Solana アドレスから別のアドレスにトークンを転送しようとしていますが、データを要求することはできましたが、金額は常に空白です。

多くの微調整と変更により、金額はゼロのままのようです。金額を含めないと行が表示されませんが、入れると金額が表示されません。

function writeBigU_Int64LE(buf, value, offset, min, max) {
    let lo = Number(value & BigInt('0xffffffff'))
    buf[offset++] = lo
    lo = lo >> 8
    buf[offset++] = lo
    lo = lo >> 8
    buf[offset++] = lo
    lo = lo >> 8
    buf[offset++] = lo
    let hi = Number((value >> BigInt(32)) & BigInt('0xffffffff'))
    buf[offset++] = hi
    hi = hi >> 8
    buf[offset++] = hi
    hi = hi >> 8
    buf[offset++] = hi
    hi = hi >> 8
    buf[offset++] = hi
    return offset
  }

  let AMOUNT = BigInt(1000)
  const b = buffer.Buffer.alloc(10)
  b.writeUInt8(3, 0)
  writeBigU_Int64LE(b, AMOUNT, 1, BigInt(0), BigInt('0xffffffffffffffff'))

  const instruction = new solanaWeb3.TransactionInstruction({
    keys: [ 
        { pubkey: token, isSigner: false, isWritable: true },
        { pubkey: provider.publicKey, isSigner: false, isWritable: true },
        { pubkey: provider.publicKey, isSigner: true, isWritable: true },
    ],
    programId : program_id,
    data: b
  });

  let transaction = new solanaWeb3.Transaction()
  transaction.add(instruction);

  let { blockhash } = await connection.getRecentBlockhash();
  transaction.recentBlockhash = blockhash;
  transaction.feePayer = provider.publicKey;

  let signed = await provider.signTransaction(transaction, connection);
  console.log(signed);
  let signature = await connection.sendRawTransaction(signed.serialize());
  console.log(signature);
  await connection.confirmTransaction(signature);
4

1 に答える 1

0

SPL トークンの金額を送金しようとしているようです。送金を適切に行うには、SPL トークン プログラムが期待する正確な指示を提供する必要があります。

送金の場合、アカウントで、ソース アカウント (SPL トークン アカウント)、宛先アカウント (SPL トークン アカウント)、署名者 (他のアカウント) を提供する必要があります。3データについては、転送する量を表す 8 バイトのリトルエンディアン 64 ビット符号なし整数が後に続くバイト (転送命令用)を提供する必要があります。詳細については、https://github.com/solana-labs/solana-program-library/blob/36e886392b8c6619b275f6681aed6d8aae6e70f9/token/program/src/instruction.rs#L88を参照してください。

一般的に、Solana が提供する JS パッケージの方が簡単です: https://www.npmjs.com/package/@solana/spl-token

以下は、新しいトークン ミントを作成して転送を実行するテストの例です: https://github.com/solana-labs/solana-program-library/blob/master/token/js/examples/create_mint_and_transfer_tokens.js

于 2021-09-07T20:54:32.423 に答える