Skip to content

Instantly share code, notes, and snippets.

@davizalpe
Last active August 16, 2022 16:31
Show Gist options
  • Save davizalpe/4ad52a1d3c0fc1667e5d1f4f493a2543 to your computer and use it in GitHub Desktop.
Save davizalpe/4ad52a1d3c0fc1667e5d1f4f493a2543 to your computer and use it in GitHub Desktop.
GNO Deposit contract interaction scripts
RPC_URL="https://rpc-chiado.gnosistestnet.com/"
DEPLOYMENT_ACCOUNT_PRIVATE_KEY=_SET_HERE_YOUR_PRIVATE_KEY
OWNER_ADDRESS=_SET_HERE_YOUR_ADDRESS_
SEND_TO_ADDRESS=_SET_HERE_AND_ADDRESS_TO_SEND_GNO_
STAKE_TOKEN_ADDRESS=0x7f3e7cDf43E543c6D08bEf131f94aB99b091D2A2 # Gnosis Token GNO
SBC_TOKEN_ADDRESS=0x6bE2df1956282d2d1936fCB06B9C3361986a0DEe # mGNO (mGNO) deposit token address
SBC_WRAPPER_ADDRESS=0x6DD45A261782EAAC28B5c165CABD38a9e1389129 # SBCWrapperProxy
# SBC_DEPOSIT_ADDRESS=0x2DCa72Dcf9fd65c806726a3F76aC51f3CEf778dc # SBCDepositContractProxy 0xdead3
SBC_DEPOSIT_ADDRESS=0xa3fCe9F33cc4220fd835f33AA0fcE88CeCAcf4C4 # SBCDepositContractProxy mGNO Chiado test

GNO Deposit contracts interaction

Install

npm i

Configure

  • Chiado environment
RPC_URL="https://rpc-chiado.gnosistestnet.com/"
DEPLOYMENT_ACCOUNT_PRIVATE_KEY=_SET_HERE_YOUR_PRIVATE_KEY
OWNER_ADDRESS=_SET_HERE_YOUR_ADDRESS_
SEND_TO_ADDRESS=_SET_HERE_AND_ADDRESS_TO_GET_GNO_
STAKE_TOKEN_ADDRESS=0x5a31ED45457b1952dF647CB45cE47e48A319CA99 # Gnosis Token GNO
SBC_TOKEN_ADDRESS=0x76CC21606caEB4B81eF07B1195Cb163169bA73da # mGNO (mGNO) deposit token address
SBC_WRAPPER_ADDRESS=0x5B5E4a4f9F0D561c8b3F3F3ea417052211204313 # SBCWrapperProxy
SBC_DEPOSIT_ADDRESS=0x65010409c4c64405F80102c34aDc57201Da1Bfd3  # SBCDepositContractProxy mGNO test
# SBC_DEPOSIT_ADDRESS=0x2DCa72Dcf9fd65c806726a3F76aC51f3CEf778dc # SBCDepositContractProxy final

Execution

  • Check if you have GNOs in your address account:
node gnoReadAmount
  • Ask to someone send GNOs from OWNER_ADDRESS to your account SEND_TO_ADDRESS.
node gnoTransferAmount
  • Approve an allowance amount from your GNOs to SBC_WRAPPER_ADDRESS contract
node gnoApprove
  • Transfer 1 GNO amount to SBC_WRAPPER_ADDRESS.
node gnoTransferAndCall
  • Check mGNO balance
node mGNOReadAmount

Deposit

  • Run and create your validation keys
docker run -it --rm -v $PWD:/app/validator_keys \                                
  ghcr.io/gnosischain/validator-data-generator:latest new-mnemonic \               
  --num_validators=1 --mnemonic_language=english \
  --folder=/app/validator_keys --eth1_withdrawal_address=_SET_YOUR_ETH1_WITHDRAWAL_ADDRESS
  • Copy values from generated validator_keys/deposit_data-${timestamp}.json file.
sudo chown $USER:$GROUP validator_keys/deposit_data-*.json
cat validator_keys/deposit_data-*.json
  • Set json output values on sbcDeposit.js script with 0x prefix.
const pubkey = '0x';
const withdrawal_credentials = '0x';
const signature = '0x';
const deposit_data_root = '0x';
  • Run
node sbcDeposit
require('dotenv').config();
const Web3 = require('web3');
const erc677ABI = [{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[],"stateMutability":"nonpayable","type":"function"}];
const privateKey = process.env.DEPLOYMENT_ACCOUNT_PRIVATE_KEY;
const web3 = new Web3(new Web3.providers.HttpProvider(process.env.RPC_URL));
const GNOTokenAddress = process.env.STAKE_TOKEN_ADDRESS;
const SBCWrapperProxyAddress = process.env.SBC_WRAPPER_ADDRESS;
const ownerAddress = process.env.OWNER_ADDRESS;
const gnoContract = new web3.eth.Contract(erc677ABI, GNOTokenAddress);
// Approve GNO owner to spend by SBCWrapperProxyAddress
const oneHundredInWeis = web3.utils.toWei('100');
gnoContract.methods.approve(SBCWrapperProxyAddress, oneHundredInWeis).estimateGas({ from: ownerAddress })
.then(gasTx => {
const encodedMethod = gnoContract.methods.approve(SBCWrapperProxyAddress, oneHundredInWeis).encodeABI();
web3.eth.accounts.signTransaction({
gas: gasTx + 10000000,
from : ownerAddress,
to : GNOTokenAddress,
data : encodedMethod
}, privateKey).then(signed => {
web3.eth.sendSignedTransaction(signed.rawTransaction)
// .on('transactionHash', console.log)
// .on('receipt', console.log)
.on('confirmation', console.log)
.on('error', console.log)
});
});
require('dotenv').config();
const Web3 = require('web3');
const erc20ABI = [{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_upgradedAddress","type":"address"}],"name":"deprecate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"deprecated","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_evilUser","type":"address"}],"name":"addBlackList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"upgradedAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balances","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maximumFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_maker","type":"address"}],"name":"getBlackListStatus","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"who","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newBasisPoints","type":"uint256"},{"name":"newMaxFee","type":"uint256"}],"name":"setParams","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"issue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"redeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"basisPointsRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isBlackListed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_clearedUser","type":"address"}],"name":"removeBlackList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MAX_UINT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_blackListedUser","type":"address"}],"name":"destroyBlackFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_initialSupply","type":"uint256"},{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_decimals","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"Issue","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newAddress","type":"address"}],"name":"Deprecate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"feeBasisPoints","type":"uint256"},{"indexed":false,"name":"maxFee","type":"uint256"}],"name":"Params","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_blackListedUser","type":"address"},{"indexed":false,"name":"_balance","type":"uint256"}],"name":"DestroyedBlackFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_user","type":"address"}],"name":"AddedBlackList","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_user","type":"address"}],"name":"RemovedBlackList","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"}];
const web3 = new Web3(new Web3.providers.HttpProvider(process.env.RPC_URL));
const GNOTokenAddress = process.env.STAKE_TOKEN_ADDRESS;
const SBCWrapperProxyAddress = process.env.SBC_WRAPPER_ADDRESS;
const SBCDepositAddress = process.env.SBC_DEPOSIT_ADDRESS;
const gnoContract = new web3.eth.Contract(erc20ABI, GNOTokenAddress);
const ownerAddress = process.env.OWNER_ADDRESS;
gnoContract.methods.symbol().
call().then(symbol => {
console.log(`Symbol from ${GNOTokenAddress} is ${symbol}`);
});
gnoContract.methods.name().
call().then(name => {
console.log(`Name from ${GNOTokenAddress} is ${name}`);
});
gnoContract.methods.decimals().
call().then(decimals => {
console.log(`Decimals from ${GNOTokenAddress} is ${decimals}`);
});
gnoContract.methods.balanceOf(ownerAddress).
call().then(amount => {
console.log(`Amount from ${ownerAddress} is ${amount}`);
});
gnoContract.methods.allowance(ownerAddress, SBCWrapperProxyAddress).
call().then(allowanceAmount => {
console.log(`Amount allowed from ${ownerAddress} to ${SBCWrapperProxyAddress} is ${allowanceAmount}`);
});
require('dotenv').config();
const Web3 = require('web3');
const wrapperABI = [{"inputs":[{"internalType":"contract SBCToken","name":"_sbcToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"received","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"rate","type":"uint256"}],"name":"SwapRateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"}],"name":"TokenSwapEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"}],"name":"TokenSwapPaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function","constant":true},{"inputs":[],"name":"sbcToken","outputs":[{"internalType":"contract SBCToken","name":"","type":"address"}],"stateMutability":"view","type":"function","constant":true},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","constant":true},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenStatus","outputs":[{"internalType":"enum SBCWrapper.TokenStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function","constant":true},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"enableToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"pauseToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_permitData","type":"bytes"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onTokenTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}];
const privateKey = process.env.DEPLOYMENT_ACCOUNT_PRIVATE_KEY;
const web3 = new Web3(new Web3.providers.HttpProvider(process.env.RPC_URL));
const GNOTokenAddress = process.env.STAKE_TOKEN_ADDRESS;
const SBCWrapperProxyAddress = process.env.SBC_WRAPPER_ADDRESS;
const ownerAddress = process.env.OWNER_ADDRESS;
const wrapperContract = new web3.eth.Contract(wrapperABI, SBCWrapperProxyAddress);
const amountInWeis = web3.utils.toWei('1');
wrapperContract.methods.swap(GNOTokenAddress, amountInWeis, '0x').estimateGas()
.then(gasTx => {
const encodedMethod = wrapperContract.methods.swap(GNOTokenAddress, amountInWeis, '0x').encodeABI();
web3.eth.accounts.signTransaction({
gas: gasTx + 10000000,
from : ownerAddress,
to : SBCWrapperProxyAddress,
data : encodedMethod
}, privateKey).then(signed => {
web3.eth.sendSignedTransaction(signed.rawTransaction)
.on('transactionHash', console.log)
.on('error', console.log)
});
});
require('dotenv').config();
const Web3 = require('web3');
const erc677ABI = [{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[],"stateMutability":"nonpayable","type":"function"}];
const web3 = new Web3(new Web3.providers.HttpProvider(process.env.RPC_URL));
const privateKey = process.env.DEPLOYMENT_ACCOUNT_PRIVATE_KEY;
const GNOTokenAddress = process.env.STAKE_TOKEN_ADDRESS;
const ownerAddress = process.env.OWNER_ADDRESS;
const destinationAddress = process.env.SEND_TO_ADDRESS;
const gnoContract = new web3.eth.Contract(erc677ABI, GNOTokenAddress);
const oneInWeis = web3.utils.toWei('1');
gnoContract.methods.transferFrom(ownerAddress, destinationAddress, oneInWeis).estimateGas({ from: ownerAddress })
.then(gasTx => {
const encodedMethod = gnoContract.methods.transferFrom(ownerAddress, destinationAddress, oneInWeis).encodeABI();
web3.eth.accounts.signTransaction({
gas: gasTx + 10000000,
from : ownerAddress,
to : GNOTokenAddress,
data : encodedMethod
}, privateKey).then(signed => {
web3.eth.sendSignedTransaction(signed.rawTransaction)
.on('transactionHash', console.log)
.on('receipt', console.log)
.on('confirmation', console.log)
.on('error', console.log)
});
});
require('dotenv').config();
const Web3 = require('web3');
const erc677ABI = [{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[],"stateMutability":"nonpayable","type":"function"}];
const privateKey = process.env.DEPLOYMENT_ACCOUNT_PRIVATE_KEY;
const web3 = new Web3(new Web3.providers.HttpProvider(process.env.RPC_URL));
const GNOTokenAddress = process.env.STAKE_TOKEN_ADDRESS;
const SBCWrapperProxyAddress = process.env.SBC_WRAPPER_ADDRESS;
const ownerAddress = process.env.OWNER_ADDRESS;
const gnoContract = new web3.eth.Contract(erc677ABI, GNOTokenAddress);
const amountInWeis = web3.utils.toWei('32');
const data = '0x';
gnoContract.methods.transferAndCall(SBCWrapperProxyAddress, amountInWeis, data).estimateGas({ from: ownerAddress })
.then(gasTx => {
const encodedMethod = gnoContract.methods.transferAndCall(SBCWrapperProxyAddress, amountInWeis, data).encodeABI();
web3.eth.accounts.signTransaction({
gas: gasTx + 10000000,
from : ownerAddress,
to : GNOTokenAddress,
data : encodedMethod
}, privateKey).then(signed => {
web3.eth.sendSignedTransaction(signed.rawTransaction)
.on('confirmation', console.log)
.on('error', console.log)
});
});
require('dotenv').config();
const Web3 = require('web3');
const erc20ABI = [{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_upgradedAddress","type":"address"}],"name":"deprecate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"deprecated","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_evilUser","type":"address"}],"name":"addBlackList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"upgradedAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balances","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maximumFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_maker","type":"address"}],"name":"getBlackListStatus","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"who","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newBasisPoints","type":"uint256"},{"name":"newMaxFee","type":"uint256"}],"name":"setParams","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"issue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"redeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"basisPointsRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isBlackListed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_clearedUser","type":"address"}],"name":"removeBlackList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MAX_UINT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_blackListedUser","type":"address"}],"name":"destroyBlackFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_initialSupply","type":"uint256"},{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_decimals","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"Issue","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newAddress","type":"address"}],"name":"Deprecate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"feeBasisPoints","type":"uint256"},{"indexed":false,"name":"maxFee","type":"uint256"}],"name":"Params","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_blackListedUser","type":"address"},{"indexed":false,"name":"_balance","type":"uint256"}],"name":"DestroyedBlackFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_user","type":"address"}],"name":"AddedBlackList","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_user","type":"address"}],"name":"RemovedBlackList","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"}];
const web3 = new Web3(new Web3.providers.HttpProvider(process.env.RPC_URL));
const SBCTokenProxyAddress = process.env.SBC_TOKEN_ADDRESS; // mGNO
const mgnoContract = new web3.eth.Contract(erc20ABI, SBCTokenProxyAddress);
const ownerAddress = process.env.OWNER_ADDRESS;
mgnoContract.methods.symbol().
call().then(symbol => {
console.log(`Symbol from ${SBCTokenProxyAddress} is ${symbol}`);
});
mgnoContract.methods.name().
call().then(name => {
console.log(`Name from ${SBCTokenProxyAddress} is ${name}`);
});
mgnoContract.methods.decimals().
call().then(decimals => {
console.log(`Decimals from ${SBCTokenProxyAddress} is ${decimals}`);
});
mgnoContract.methods.balanceOf(ownerAddress).
call().then(amount => {
console.log(`Amount from ${ownerAddress} is ${amount}`);
});
require('dotenv').config();
const Web3 = require('web3');
const abiSBCDeposit = [{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_token","internalType":"address"}]},{"type":"event","name":"DepositEvent","inputs":[{"type":"bytes","name":"pubkey","internalType":"bytes","indexed":false},{"type":"bytes","name":"withdrawal_credentials","internalType":"bytes","indexed":false},{"type":"bytes","name":"amount","internalType":"bytes","indexed":false},{"type":"bytes","name":"signature","internalType":"bytes","indexed":false},{"type":"bytes","name":"index","internalType":"bytes","indexed":false}],"anonymous":false},{"type":"event","name":"Paused","inputs":[{"type":"address","name":"account","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"Unpaused","inputs":[{"type":"address","name":"account","internalType":"address","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"batchDeposit","inputs":[{"type":"bytes","name":"pubkeys","internalType":"bytes"},{"type":"bytes","name":"withdrawal_credentials","internalType":"bytes"},{"type":"bytes","name":"signatures","internalType":"bytes"},{"type":"bytes32[]","name":"deposit_data_roots","internalType":"bytes32[]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"claimTokens","inputs":[{"type":"address","name":"_token","internalType":"address"},{"type":"address","name":"_to","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"deposit","inputs":[{"type":"bytes","name":"pubkey","internalType":"bytes"},{"type":"bytes","name":"withdrawal_credentials","internalType":"bytes"},{"type":"bytes","name":"signature","internalType":"bytes"},{"type":"bytes32","name":"deposit_data_root","internalType":"bytes32"},{"type":"uint256","name":"stake_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes","name":"","internalType":"bytes"}],"name":"get_deposit_count","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"get_deposit_root","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"onTokenTransfer","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"uint256","name":"stake_amount","internalType":"uint256"},{"type":"bytes","name":"data","internalType":"bytes"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"pause","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"paused","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IERC20"}],"name":"stake_token","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"supportsInterface","inputs":[{"type":"bytes4","name":"interfaceId","internalType":"bytes4"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"unpause","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"validator_withdrawal_credentials","inputs":[{"type":"bytes","name":"","internalType":"bytes"}]}]
const privateKey = process.env.DEPLOYMENT_ACCOUNT_PRIVATE_KEY;
const web3 = new Web3(new Web3.providers.HttpProvider(process.env.RPC_URL));
const SBCDepositAddress = process.env.SBC_DEPOSIT_ADDRESS;
const ownerAddress = process.env.OWNER_ADDRESS;
const sbcDepositContract = new web3.eth.Contract(abiSBCDeposit, SBCDepositAddress);
const pubkey = '0x';
const withdrawal_credentials = '0x';
const signature = '0x';
const deposit_data_root = '0x';
const value = web3.utils.toWei('32');;
sbcDepositContract.methods.deposit(pubkey, withdrawal_credentials, signature, deposit_data_root, value).estimateGas({ from: ownerAddress })
.then(gasTx => {
const encodedMethod = sbcDepositContract.methods.deposit(pubkey, withdrawal_credentials, signature, deposit_data_root, value).encodeABI();
web3.eth.accounts.signTransaction({
gas: gasTx + 10000000,
from : ownerAddress,
to : SBCDepositAddress,
data : encodedMethod
}, privateKey).then(signed => {
web3.eth.sendSignedTransaction(signed.rawTransaction)
.on('confirmation', console.log)
.on('error', console.log)
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment