Web3 Voice🎙
pragma solana >= 0.2.1;compile
contract flipper {
bool private value;
constructor(bool initvalue) public {
value = initvalue;
}
function flip() public {
value = !value;
}
function get() public view returns (bool) {
return value;
}
}
docker run --rm -it -v $(pwd):/src ghcr.io/hyperledger/solang compile -v -o /src --target solana /src/flipper.sol
$ du -b flipper.*
343 flipper.abi
108424 flipper.so
256 flipper.sol
require('dotenv').config()
const {Connection, LAMPORTS_PER_SOL, Keypair, clusterApiUrl} = require('@solana/web3.js');
const {Contract} = require('@solana/solidity');
const {readFileSync} = require('fs');
const bs58 = require('bs58');
const FLIPPER_ABI = JSON.parse(readFileSync('./flipper.abi', 'utf8'));
const PROGRAM_SO = readFileSync('./flipper.so');
function keypairFormEnv(name) {
if (process.env[name] && process.env[name]) {
return Keypair.fromSecretKey(bs58.decode(process.env[name]));
}
return Keypair.generate();
}
(async function () {
console.log('Connecting to your local Solana node ...');
const connection = new Connection(clusterApiUrl('devnet'), 'confirmed');
const payer = keypairFormEnv('PAYER');
console.log('payer', payer.publicKey.toBase58())
console.log('Airdropping SOL to a new wallet ...');
const signature = await connection.requestAirdrop(payer.publicKey, LAMPORTS_PER_SOL);
await connection.confirmTransaction(signature, 'confirmed');
const program = keypairFormEnv('PROGRAM');
console.log('program', program.publicKey.toBase58())
const storage = keypairFormEnv('STORAGE');
console.log('storage', storage.publicKey.toBase58())
const contract = new Contract(connection, program.publicKey, storage.publicKey, FLIPPER_ABI, payer);
await contract.load(program, PROGRAM_SO);
console.log('Program deployment finished, deploying the flipper contract ...');
const out = await contract.deploy('flipper', [true], storage, 17);
console.log(out)
const res = await contract.functions.get();
console.log('state: ' + res.result);
await contract.functions.flip();
const res2 = await contract.functions.get();
console.log('state: ' + res2.result);
})();
Connecting to your local Solana node ...1. deploy
payer 3obngeFG3w9MCbva1rtL4FayJ7kzaCA6jgBaGoKz9mo1
Airdropping SOL to a new wallet ...
program aL6WYgF86gTpJPYjYuDEh8d6yhqjvXwvYepLzCjPAkP
storage CG5Yy3XZTpm6xYoVxTkQ2BQ8rM2isj61V1gTN7Pxh8UJ
Program deployment finished, deploying the flipper contract ...
{
logs: [
'Program 11111111111111111111111111111111 invoke [1]',
'Program 11111111111111111111111111111111 success',
'Program aL6WYgF86gTpJPYjYuDEh8d6yhqjvXwvYepLzCjPAkP invoke [1]',
'Program aL6WYgF86gTpJPYjYuDEh8d6yhqjvXwvYepLzCjPAkP consumed 381 of 400000 compute units',
'Program aL6WYgF86gTpJPYjYuDEh8d6yhqjvXwvYepLzCjPAkP success'
],
events: [],
computeUnitsUsed: 381,
signature: '5qcqHpWhuRk6TAVC4oqJMWxBkbM2euHvXVngJ9p4fniuqXBdygi5KTHBNaianFpJHdhVrpSzL4ftobYVe9HNXuFD'
}
state: true
state: false
require_static_program_ids_in_transaction
🟩|🟩|🟩|🟩| enable versioned transaction message processing - versioned_tx_message_enabled
🟩|🟩|🟥|🟥| increase tx account lock limit from 64 to 128 #27241 - increase_tx_account_lock_limit
🟩|🟥|🟥|🟥| loosen cpi size restrictions #26641 - loosen_cpi_size_restriction
Reference0:673ac0f6fdb9be78fcb138d95156a34b7eb365e47f2b5deb750da80dffda11fc
0:673ac0f6fdb9be78fcb138d95156a34b7eb365e47f2b5deb750da80dffda11fc