solana-solidity.js
solana-solidity.js copied to clipboard
Got TransactionError: invalid program argument on contract deployment
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
}
Same issue with https://github.com/hyperledger/solang#build-for-solana flipper example.