Skip to content

Instantly share code, notes, and snippets.

View Ankarrr's full-sized avatar
👨‍💻
Building

Anderson Chen Ankarrr

👨‍💻
Building
View GitHub Profile
// const ContractKit = require('@celo/contractkit');
import ContractKit from '@celo/contractkit';
// const phrase = 'nature hold lumber pizza grief badge danger boat oyster grit rifle cloth';
const celoAddress = '0x897FF26e794Ba4F494D3C83C86fAFA3eB0DaaCD4';
const privateKey = '0xce002e6b316387af656030dabfe1a4ec5bce375a010b9fa2075d434c1dee3477';
const kit = ContractKit.newKit('https://alfajores-forno.celo-testnet.org');
kit.addAccount(privateKey);
/**
[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_controller","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"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"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":fa
// Prepare parameters
const PERMIT_TYPEHASH = '0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9';
const usdcVault = '0xBdF726e6eBA19342478415aF22ec097efc94258f'; // With USDC
const relayer = '0xC5fdf4076b8F3A5357c5E395ab970B5B54098Fef'; // With ETH
const nonce = await usdcContract.methods.nonces(usdcVault).call();
const value = 1000000000;
const MAX_UINT256 = "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff";
// Encode data
const data = web3.eth.abi.encodeParameters(['bytes32','address','address','uint256','uint256','uint256'], [PERMIT_TYPEHASH, usdcVault, relayer, value, nonce, MAX_UINT256]);
// Create web3 instance
export const alchemyWeb3 = createAlchemyWeb3(currentHttpProvider, {
maxRetries: 5,
retryJitter: 250,
});
// Do something
// Reset the provider
// alchemyWeb3.setProvider(newProvider);
[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"AddedOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"approvedHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"ApproveHash","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"masterCopy","type":"address"}],"name":"ChangedMasterCopy","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"ChangedThreshold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract Module","name":"module","type":"address"}],"name":"DisabledModule","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract Module","name":"module","type":"address"}],"name"
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"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":"_account","type":"address"}],"name":"unBlacklist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"minter","type":"address"}],"name":"removeMinter"
[
{
"inputs": [],
"name": "accrueInterest",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
{
"contractName": "DTokenInterface",
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "minter",
/**
* Goal
* - Deploy a proxy contract and exexute a tx to send erc20 token from proxy contract
* - Proxy contract doesn't need to pay gas fee
*
* Ehereum node
* - Using Rinkeby testnet
*/
const ethers = require('ethers');