1.1.0 • Published 1 year ago

nick-method v1.1.0

Weekly downloads
-
License
ISC
Repository
github
Last release
1 year ago

nick-method

A package that offers various options for creating transactions in accordance with the nick method, as well as utility functions for recovering transactions and sender addresses from raw transactions.

To learn more about Nick's method, read this article: Nick's method - Ethereum Keyless Execution

Note: Currently, only legacy transactions (type 0) are supported. Type 1 and 2 will be added soon.

This package is in testing phase, please test on testnets before applying in production.

Usage

npm

$ npm install nick-method

API

const nickMethod = require("nick-method");

const txParams = nickMethod.generateTypeZeroTxJSONFromParams(nonce, gasPrice, gasLimit, value, data, optionalParameters);

const transactionConfig = nickMethod.generateTypeZeroTxNickMethodConfig(txParams);

const deploymentConfig = nickMethod.generateNickMethodConfigForContractDeployment(txParams);

const executionCost = nickMethod.getTypeZeroTxExecutionCost(txParams);

const gasCost = nickMethod.getTypeZeroTxGasCost(txParams);


// Utilities:

isProtectedTx(..)
isProtectedRawTx(..)
recoverSenderFromRawTx(..)
getTxType(..)

Soon

Detailed documentation about how to use each function will be available soon under ./docs.

Multi-chain deployment on the same address

Generate txParams

const nickMethod = require("nick-method");

let txParams = {
  nonce: 0,  // nonce should be 0
  value: 0,
  gasPrice: 1000000000000, // gasPrice should be taken into consideration for future 
  gasLimit: 1000000, // gasLimit for the deployment
  data: "0xab11ffcc.......", // bytecode + constructor argument encoded if present
};

Generate config

const config = nickMethod.generateNickMethodConfigForContractDeployment(txParams);

> {
  rawTx: '0xf9047c8085e8d4a51000830f42408080b90429.............',
  deployerAddress: '0x62d517a7451007232d2f1DDE6385882DdC293F26',
  contractAddress: '0xE8cE8c9d71f98893B39286D382eEA3B94010A020',
  gasPrice: '0xe8d4a51000',
  gasLimit: '0xf4240',
  r: '0x1212121212121212121212121212121212121212121212121212121212121212',
  s: '0x1811fb2e72af1eee2210a2bab6f93da5490cbfe935568afd461f9bf5e2c76151',
  v: '0x1b'
}

Funding deployer Address

Fund the deployerAddress with the necessary cost value + gasPrice * gasLimit,can be calculated with getTypeZeroTxExecutionCost(txParams).

Broadcasting the rawTx to the network

Connect to networks nodes that allow unprotected tx.

const Web3 = require("web3");

// These networks support Unprotected tx such as alfajores-celo, l14-LUKSO, binance testnet.

// const web3 = new Web3('https://celo-alfajores.infura.io/v3/{API}');
// const web3 = new Web3('https://data-seed-prebsc-1-s1.binance.org:8545/');
// const web3 = new Web3('https://rpc.l14.lukso.network');

Execute the script below with uncommenting the intended network to deploy on:

const Web3 = require("web3");
// const web3 = new Web3('https://celo-alfajores.infura.io/v3/{API}');
// const web3 = new Web3('https://data-seed-prebsc-1-s1.binance.org:8545/');
// const web3 = new Web3('https://rpc.l14.lukso.network');

const rawTx = "0xf9047c8085e8d4a51000830f42408080b90429...."; // Paste the full rawTx here

async function sendRawTx() {
  await web3.eth.sendSignedTransaction(rawTx).on("receipt", console.log);
}

sendRawTx();

Contract deployed

The contract deployed will be created on the contractAddress pointed by the config generated from generateNickMethodConfigForContractDeployment(..) function. The script above can be executed on several networks and the resultant contract address will be the same as long as the deployer address is funded.