solana-solidity.js icon indicating copy to clipboard operation
solana-solidity.js copied to clipboard

Got TransactionError: invalid program argument on contract deployment

Open wolfflow opened this issue 2 years ago • 1 comments

Tried to deploy ERC20.sol example

Solang version: v0.1.13

Expected: Successful deploy

Got: TransactionError: invalid program argument

JS Source:

const { Connection, LAMPORTS_PER_SOL, Keypair } = require('@solana/web3.js');
const { Contract } = require('@solana/solidity');
const { readFileSync } = require('fs');

const ERC20_ABI = JSON.parse(readFileSync('./build/ERC20.abi', 'utf8'));
const BUNDLE_SO = readFileSync('./build/bundle.so');

function publicKeyToHex(publicKey) {
    return '0x' + publicKey.toBuffer().toString('hex');
}


(async function () {
    console.log('Connecting to your local Solana node ...');
    const connection = new Connection('http://localhost:8899', 'confirmed');

    const payer = Keypair.generate();

    console.log('Airdropping SOL to a new wallet ...');
    const signature = await connection.requestAirdrop(payer.publicKey, 10 * LAMPORTS_PER_SOL);
    await connection.confirmTransaction(signature, 'confirmed');

    const address = publicKeyToHex(payer.publicKey);
    const program = Keypair.generate();
    const storage = Keypair.generate();

    const contract = new Contract(
        connection,
        program.publicKey,
        storage.publicKey,
        ERC20_ABI,
        payer
    );

    console.log('Deploying the Solang-compiled ERC20 program ...');
    await contract.load(program, BUNDLE_SO);

    console.log('Program deployment finished, deploying the ERC20 contract ...');
    await contract.deploy(
        'ERC20',
        ['Solana', 'SOL', '1000000000000000000'],
        storage,
        4096 * 8
    );

    console.log('Contract deployment finished, invoking some contract functions ...');
    const symbol = await contract.symbol();
    const balance = await contract.balanceOf(address);

    console.log(`ERC20 contract for ${symbol} deployed!`);
    console.log(`Your wallet at ${address} has a balance of ${balance} tokens.`);

    contract.addEventListener(function (event) {
        console.log(`${event.name} event emitted!`);
        console.log(`${event.args[0]} sent ${event.args[2]} tokens to ${event.args[1]}`);
    });

    console.log('Sending tokens will emit a "Transfer" event ...');
    const recipient = Keypair.generate();
    await contract.transfer(recipient.publicKey.toBytes(), 1000000000000000000);

    process.exit(0);
})();

Steps to reproduce node ERC20.js -- see source above

Connecting to your local Solana node ...
Airdropping SOL to a new wallet ...
Deploying the Solang-compiled ERC20 program ...
Program deployment finished, deploying the ERC20 contract ...
Transaction simulation failed: Error processing Instruction 1: invalid program argument
    Program 11111111111111111111111111111111 invoke [1]
    Program 11111111111111111111111111111111 success
    Program Hn9KXdnBK6h2A7vZ2YqnnQdqzh8zv92qQsAEBHSHqv7j invoke [1]
    Program Hn9KXdnBK6h2A7vZ2YqnnQdqzh8zv92qQsAEBHSHqv7j consumed 550 of 400000 compute units
    Program Hn9KXdnBK6h2A7vZ2YqnnQdqzh8zv92qQsAEBHSHqv7j failed: invalid program argument
/Users/xf/Work/mycompany/_research/crypto/solana-apps/solana-solidity.js/node_modules/@solana/solidity/lib/logs.js:162
            ? new errors_1.TransactionError(failedMatch[2])
              ^

TransactionError: invalid program argument
    at parseTransactionError (/Users/xf/Work/mycompany/_research/crypto/solana-apps/solana-solidity.js/node_modules/@solana/solidity/lib/logs.js:162:15)
    at /Users/xf/Work/mycompany/_research/crypto/solana-apps/solana-solidity.js/node_modules/@solana/solidity/lib/logs.js:123:27
    at Generator.throw (<anonymous>)
    at rejected (/Users/xf/Work/mycompany/_research/crypto/solana-apps/solana-solidity.js/node_modules/@solana/solidity/lib/logs.js:6:65)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
  logs: [
    'Program 11111111111111111111111111111111 invoke [1]',
    'Program 11111111111111111111111111111111 success',
    'Program Hn9KXdnBK6h2A7vZ2YqnnQdqzh8zv92qQsAEBHSHqv7j invoke [1]',
    'Program Hn9KXdnBK6h2A7vZ2YqnnQdqzh8zv92qQsAEBHSHqv7j consumed 550 of 400000 compute units',
    'Program Hn9KXdnBK6h2A7vZ2YqnnQdqzh8zv92qQsAEBHSHqv7j failed: invalid program argument'
  ],
  computeUnitsUsed: 550
}

wolfflow avatar Nov 16 '22 13:11 wolfflow

Same issue with https://github.com/hyperledger/solang#build-for-solana flipper example.

AliceInHunterland avatar Nov 16 '22 14:11 AliceInHunterland