Skip to content

Commit

Permalink
Merge pull request #51 from provable-things/add-optional-gas-prices
Browse files Browse the repository at this point in the history
feat(CLI): add optional gas prices
  • Loading branch information
gskapka authored Jul 21, 2022
2 parents 0ae9e1c + f59bfe3 commit e7a6c24
Show file tree
Hide file tree
Showing 14 changed files with 13,753 additions and 47 deletions.
43 changes: 26 additions & 17 deletions cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ const VERSION_ARG = '--version'
const NETWORK_ARG = '<network>'
const RAW_TX_ARG = '<rawSignedTx>'
const SIGN_MSG_CMD = 'signMessage'
const GAS_PRICE_FLAG = '--gasPrice'
const RECIPIENT_ARG = '<recipient>'
const TOKEN_NAME_ARG = '<tokenName>'
const SPENDER_ARG = '<spenderAddress>'
Expand Down Expand Up @@ -101,27 +102,27 @@ const USAGE_INFO = `
${TOOL_NAME} ${SHOW_SUGGESTED_FEES_CMD}
${TOOL_NAME} ${SHOW_WALLET_DETAILS_CMD}
${TOOL_NAME} ${SIGN_MSG_CMD} ${MSG_ARG}
${TOOL_NAME} ${DEPLOY_WETH_CMD}
${TOOL_NAME} ${CHECK_ERC1820_EXISTS_CMD}
${TOOL_NAME} ${SHOW_EXISTING_CONTRACTS_CMD}
${TOOL_NAME} ${GET_ACCOUNT_NONCE_CMD} ${ETH_ADDRESS_ARG}
${TOOL_NAME} ${SEND_ETH_CMD} ${ETH_ADDRESS_ARG} ${AMOUNT_ARG}
${TOOL_NAME} ${PUSH_RAW_TX_CMD} ${RAW_TX_ARG}
${TOOL_NAME} ${GET_TRANSACTION_COUNT_CMD} ${ETH_ADDRESS_ARG}
${TOOL_NAME} ${DEPLOY_PTOKEN_CMD} [${WITH_GSN_ARG}]
${TOOL_NAME} ${FLATTEN_CONTRACT_CMD} [${WITH_GSN_ARG}]
${TOOL_NAME} ${GET_ORIGIN_CHAIN_ID_CMD} ${DEPLOYED_ADDRESS_ARG}
${TOOL_NAME} ${DEPLOY_WETH_CMD} [${GAS_PRICE_FLAG}=<wei>]
${TOOL_NAME} ${GET_BALANCE_CMD} ${DEPLOYED_ADDRESS_ARG} ${ETH_ADDRESS_ARG}
${TOOL_NAME} ${HAS_MINTER_ROLE_CMD} ${DEPLOYED_ADDRESS_ARG} ${ETH_ADDRESS_ARG}
${TOOL_NAME} ${GRANT_ROLE_CMD} ${DEPLOYED_ADDRESS_ARG} ${ETH_ADDRESS_ARG}
${TOOL_NAME} ${REVOKE_ROLE_CMD} ${DEPLOYED_ADDRESS_ARG} ${ETH_ADDRESS_ARG}
${TOOL_NAME} ${APPROVE_CMD} ${DEPLOYED_ADDRESS_ARG} ${SPENDER_ARG} ${AMOUNT_ARG}
${TOOL_NAME} ${CHANGE_ORIGIN_CHAIN_ID_CMD} ${DEPLOYED_ADDRESS_ARG} ${ORIGIN_CHAIN_ID_ARG}
${TOOL_NAME} ${TRANSFER_TOKEN_CMD} ${DEPLOYED_ADDRESS_ARG} ${RECIPIENT_ARG} ${AMOUNT_ARG}
${TOOL_NAME} ${SEND_ETH_CMD} ${ETH_ADDRESS_ARG} ${AMOUNT_ARG} [${GAS_PRICE_FLAG}=<wei>]
${TOOL_NAME} ${DEPLOY_PTOKEN_CMD} [${WITH_GSN_ARG}] [${GAS_PRICE_FLAG}=<wei>]
${TOOL_NAME} ${VERIFY_CONTRACT_CMD} ${NETWORK_ARG} ${DEPLOYED_ADDRESS_ARG} [${WITH_GSN_ARG}]
${TOOL_NAME} ${SET_ADMIN_OPERATOR_CMD} ${DEPLOYED_ADDRESS_ARG} ${ETH_ADDRESS_ARG}
${TOOL_NAME} ${SET_ADMIN_OPERATOR_CMD} ${DEPLOYED_ADDRESS_ARG} ${ETH_ADDRESS_ARG} [${GAS_PRICE_FLAG}=<wei>]
${TOOL_NAME} ${GRANT_ROLE_CMD} ${DEPLOYED_ADDRESS_ARG} ${ETH_ADDRESS_ARG} [${GAS_PRICE_FLAG}=<wei>]
${TOOL_NAME} ${REVOKE_ROLE_CMD} ${DEPLOYED_ADDRESS_ARG} ${ETH_ADDRESS_ARG} [${GAS_PRICE_FLAG}=<wei>]
${TOOL_NAME} ${APPROVE_CMD} ${DEPLOYED_ADDRESS_ARG} ${SPENDER_ARG} ${AMOUNT_ARG} [${GAS_PRICE_FLAG}=<wei>]
${TOOL_NAME} ${ENCODE_INIT_ARGS_CMD} ${TOKEN_NAME_ARG} ${TOKEN_SYMBOL_ARG} ${TOKEN_ADMIN_ADDRESS_ARG} ${ORIGIN_CHAIN_ID_ARG}
${TOOL_NAME} ${PEG_OUT_CMD} ${DEPLOYED_ADDRESS_ARG} ${AMOUNT_ARG} ${RECIPIENT_ARG} ${DESTINATION_CHAIN_ID_ARG} [${USER_DATA_ARG}]
${TOOL_NAME} ${TRANSFER_TOKEN_CMD} ${DEPLOYED_ADDRESS_ARG} ${RECIPIENT_ARG} ${AMOUNT_ARG} [${GAS_PRICE_FLAG}=<wei>]
${TOOL_NAME} ${CHANGE_ORIGIN_CHAIN_ID_CMD} ${DEPLOYED_ADDRESS_ARG} ${ORIGIN_CHAIN_ID_ARG} [${GAS_PRICE_FLAG}=<wei>]
${TOOL_NAME} ${PEG_OUT_CMD} ${DEPLOYED_ADDRESS_ARG} ${AMOUNT_ARG} ${RECIPIENT_ARG} ${DESTINATION_CHAIN_ID_ARG} [${USER_DATA_ARG}] [${GAS_PRICE_FLAG}=<wei>]
❍ Commands:
${DEPLOY_PTOKEN_CMD} ❍ Deploy the logic contract.
Expand Down Expand Up @@ -164,6 +165,7 @@ const USAGE_INFO = `
${DESTINATION_CHAIN_ID_ARG} ❍ A destination chain ID as a 'bytes4' solidity type.
${SPENDER_ARG} ❍ An ETH address that may spend tokens on your behalf.
${SIGN_MSG_CMD} ❍ Sign the passed in ${MSG_ARG} using the gpg encrypted key.
${GAS_PRICE_FLAG}=<wei> ❍ The gas price to use. Uses ethersjs suggested fees if omitted.
${WITH_GSN_ARG} ❍ Use the version of the pToken with GasStationNetwork logic [default: true].
${NETWORK_ARG} ❍ Network the pToken is deployed on. It must exist in the 'hardhat.config.json'.
`
Expand All @@ -177,25 +179,29 @@ const main = _ => {
} else if (CLI_ARGS[SHOW_EXISTING_CONTRACTS_CMD]) {
return showExistingPTokenContractAddresses()
} else if (CLI_ARGS[DEPLOY_PTOKEN_CMD]) {
return deployContract(convertStringToBool(CLI_ARGS[WITH_GSN_OPTIONAL_ARG]))
return deployContract(convertStringToBool(CLI_ARGS[WITH_GSN_OPTIONAL_ARG], CLI_ARGS[GAS_PRICE_FLAG]))
} else if (CLI_ARGS[FLATTEN_CONTRACT_CMD]) {
return flattenContract(convertStringToBool(CLI_ARGS[WITH_GSN_OPTIONAL_ARG]))
} else if (CLI_ARGS[GET_BALANCE_CMD]) {
return showBalanceOf(CLI_ARGS[DEPLOYED_ADDRESS_ARG], CLI_ARGS[ETH_ADDRESS_ARG])
} else if (CLI_ARGS[GRANT_ROLE_CMD]) {
return grantMinterRole(CLI_ARGS[DEPLOYED_ADDRESS_ARG], CLI_ARGS[ETH_ADDRESS_ARG])
return grantMinterRole(CLI_ARGS[DEPLOYED_ADDRESS_ARG], CLI_ARGS[ETH_ADDRESS_ARG], CLI_ARGS[GAS_PRICE_FLAG])
} else if (CLI_ARGS[REVOKE_ROLE_CMD]) {
return revokeMinterRole(CLI_ARGS[DEPLOYED_ADDRESS_ARG], CLI_ARGS[ETH_ADDRESS_ARG])
return revokeMinterRole(CLI_ARGS[DEPLOYED_ADDRESS_ARG], CLI_ARGS[ETH_ADDRESS_ARG], CLI_ARGS[GAS_PRICE_FLAG])
} else if (CLI_ARGS[GET_TRANSACTION_COUNT_CMD]) {
return getTransactionCount(CLI_ARGS[ETH_ADDRESS_ARG])
} else if (CLI_ARGS[SEND_ETH_CMD]) {
return sendEth(CLI_ARGS[ETH_ADDRESS_ARG], CLI_ARGS[AMOUNT_ARG])
return sendEth(CLI_ARGS[ETH_ADDRESS_ARG], CLI_ARGS[AMOUNT_ARG], CLI_ARGS[GAS_PRICE_FLAG])
} else if (CLI_ARGS[DEPLOY_WETH_CMD]) {
return deployWeth()
return deployWeth(CLI_ARGS[GAS_PRICE_FLAG])
} else if (CLI_ARGS[GET_ORIGIN_CHAIN_ID_CMD]) {
return getOriginChainId(CLI_ARGS[DEPLOYED_ADDRESS_ARG])
} else if (CLI_ARGS[CHANGE_ORIGIN_CHAIN_ID_CMD]) {
return changeOriginChainId(CLI_ARGS[DEPLOYED_ADDRESS_ARG], CLI_ARGS[ORIGIN_CHAIN_ID_ARG])
return changeOriginChainId(
CLI_ARGS[DEPLOYED_ADDRESS_ARG],
CLI_ARGS[ORIGIN_CHAIN_ID_ARG],
CLI_ARGS[GAS_PRICE_FLAG],
)
} else if (CLI_ARGS[HAS_MINTER_ROLE_CMD]) {
return hasMinterRole(CLI_ARGS[DEPLOYED_ADDRESS_ARG], CLI_ARGS[ETH_ADDRESS_ARG])
} else if (CLI_ARGS[CHECK_ERC1820_EXISTS_CMD]) {
Expand All @@ -207,7 +213,7 @@ const main = _ => {
} else if (CLI_ARGS[SIGN_MSG_CMD]) {
return signMessage(CLI_ARGS[MSG_ARG])
} else if (CLI_ARGS[SET_ADMIN_OPERATOR_CMD]) {
return setAdminOperator(CLI_ARGS[DEPLOYED_ADDRESS_ARG], CLI_ARGS[ETH_ADDRESS_ARG])
return setAdminOperator(CLI_ARGS[DEPLOYED_ADDRESS_ARG], CLI_ARGS[ETH_ADDRESS_ARG], CLI_ARGS[GAS_PRICE_FLAG])
} else if (CLI_ARGS[ENCODE_INIT_ARGS_CMD]) {
return showEncodedInitArgs(
CLI_ARGS[TOKEN_NAME_ARG],
Expand All @@ -220,12 +226,14 @@ const main = _ => {
CLI_ARGS[DEPLOYED_ADDRESS_ARG],
CLI_ARGS[RECIPIENT_ARG],
CLI_ARGS[AMOUNT_ARG],
CLI_ARGS[GAS_PRICE_FLAG],
)
} else if (CLI_ARGS[APPROVE_CMD]) {
return approve(
CLI_ARGS[DEPLOYED_ADDRESS_ARG],
CLI_ARGS[SPENDER_ARG],
CLI_ARGS[AMOUNT_ARG],
CLI_ARGS[GAS_PRICE_FLAG],
)
} else if (CLI_ARGS[PEG_OUT_CMD]) {
return pegOut(
Expand All @@ -234,6 +242,7 @@ const main = _ => {
CLI_ARGS[RECIPIENT_ARG],
CLI_ARGS[DESTINATION_CHAIN_ID_ARG],
CLI_ARGS[USER_DATA_OPTIONAL_ARG],
CLI_ARGS[GAS_PRICE_FLAG],
)
} else if (CLI_ARGS[VERIFY_CONTRACT_CMD]) {
return verifyContract(
Expand Down
9 changes: 7 additions & 2 deletions lib/approve.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,16 @@ const { getPTokenContract } = require('./get-ptoken-contract')
const { callFxnInContractAndAwaitReceipt } = require('./contract-utils')
const { checkTokenBalanceIsSufficient } = require('./check-token-balance')

const approve = (_deployedContractAddress, _spender, _amount) =>
const approve = (_deployedContractAddress, _spender, _amount, _maybeGasPrice = null) =>
getPTokenContract(_deployedContractAddress)
.then(checkTokenBalanceIsSufficient(_amount))
.then(_contract =>
callFxnInContractAndAwaitReceipt('approve(address,uint256)', [ _spender, _amount ], _contract)
callFxnInContractAndAwaitReceipt(
'approve(address,uint256)',
[ _spender, _amount ],
_maybeGasPrice,
_contract,
)
)
.then(_receipt => console.info('✔ Success! Transaction receipt:\n', _receipt))

Expand Down
19 changes: 13 additions & 6 deletions lib/change-minter-role.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,27 @@
const { getPTokenContract } = require('./get-ptoken-contract')
const { callFxnInContractAndAwaitReceipt } = require('./contract-utils')

const changeMinterRole = (_deployedContractAddress, _address, grantRole) => {
const changeMinterRole = (_deployedContractAddress, _address, grantRole, _maybeGasPrice = null) => {
console.info(
`✔ ${grantRole ? 'Granting' : 'Revoking'} minter role ${grantRole ? 'to' : 'from'} '${_address}'...`
)
return getPTokenContract(_deployedContractAddress)
.then(callFxnInContractAndAwaitReceipt(grantRole ? 'grantMinterRole' : 'revokeMinterRole', [ _address ]))
.then(_contract =>
callFxnInContractAndAwaitReceipt(
grantRole ? 'grantMinterRole' : 'revokeMinterRole',
[ _address ],
_maybeGasPrice,
_contract,
)
)
.then(_receipt => console.info('✔ Success! Transaction receipt:\n', _receipt))
}

const grantMinterRole = (_deployedContractAddress, _address) =>
changeMinterRole(_deployedContractAddress, _address, true)
const grantMinterRole = (_deployedContractAddress, _address, _maybeGasPrice = null) =>
changeMinterRole(_deployedContractAddress, _address, true, _maybeGasPrice)

const revokeMinterRole = (_deployedContractAddress, _address) =>
changeMinterRole(_deployedContractAddress, _address, false)
const revokeMinterRole = (_deployedContractAddress, _address, _maybeGasPrice = null) =>
changeMinterRole(_deployedContractAddress, _address, false, _maybeGasPrice)

module.exports = {
revokeMinterRole,
Expand Down
16 changes: 11 additions & 5 deletions lib/contract-utils.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
const { curry } = require('ramda')

const callFxnInContract = (_fxnName, _fxnArgs, _contract) =>
_contract[_fxnName](..._fxnArgs)
const callFxnInContract = (_fxnName, _fxnArgs, _contract, _maybeGasPrice = null) =>
_contract[_fxnName](..._fxnArgs, _maybeGasPrice === null ? {} : { gasPrice: _maybeGasPrice })

const callFxnInContractAndAwaitReceipt = curry((_fxnName, _fxnArgs, _contract) =>
console.info(`✔ Calling '${_fxnName}' function in contract & awaiting mining for the receipt...`) ||
callFxnInContract(_fxnName, _fxnArgs, _contract).then(_tx => _tx.wait())
const callFxnInContractAndAwaitReceipt = curry((_fxnName, _fxnArgs, _maybeGasPrice, _contract) =>
console.info(
`✔ Calling '${
_fxnName
}' function in contract${
_maybeGasPrice && ` with gas price of ${_maybeGasPrice} gwei`
} & awaiting mining for the receipt...`
) ||
callFxnInContract(_fxnName, _fxnArgs, _contract, _maybeGasPrice).then(_tx => _tx.wait())
)

const callReadOnlyFxnInContract = curry((_fxnName, _fxnArgs, _contract) =>
Expand Down
4 changes: 2 additions & 2 deletions lib/deploy-contract.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@ const { deployEthersContract } = require('./deploy-ethers-contract')
const { getEnvironmentVariable } = require('./get-environment-variable')
const { getContractFactoryMaybeWithGSN } = require('./get-contract-factory')

const deployContract = _withGSN =>
const deployContract = (_withGSN, _maybeGasPrice = null) =>
console.info('✔ Deploying logic contract...') ||
getEnvConfiguration()
.then(() => getEnvironmentVariable(ENDPOINT_ENV_VAR_KEY))
.then(getProvider)
.then(checkEndpoint)
.then(getEthersWallet)
.then(getContractFactoryMaybeWithGSN(_withGSN))
.then(deployEthersContract)
.then(_contractFactory => deployEthersContract(_contractFactory, [], _maybeGasPrice))
.then(_contract => _contract.deployTransaction.wait())
.then(_receipt => console.info(`✔ Tx Mined! Contract address: ${prop('contractAddress', _receipt)}`))

Expand Down
8 changes: 5 additions & 3 deletions lib/deploy-ethers-contract.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
const deployEthersContract = (_contractFactory, _constructorArgs = []) =>
console.info('✔ Deployment tx sent, awaiting mining...') ||
const deployEthersContract = (_contractFactory, _constructorArgs = [], _maybeGasPrice = null) =>
console.info(
`✔ Deployment tx sent${_maybeGasPrice && ` using gas price ${_maybeGasPrice} gwei`}, awaiting mining...`
) ||
_contractFactory
.deploy(..._constructorArgs)
.deploy(..._constructorArgs, _maybeGasPrice === null ? {} : { gasPrice: _maybeGasPrice })
.catch(_err => Promise.reject(new Error(`${_err.message}\n✘ Deployment failed! See above for more info.`)))

module.exports = { deployEthersContract }
4 changes: 2 additions & 2 deletions lib/deploy-weth.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,15 @@ const getWethContractFactory = _wallet =>
]))
.then(([ _abi, _bytecode ]) => new ethers.ContractFactory(_abi, _bytecode, _wallet))

const deployWeth = _ =>
const deployWeth = (_maybeGasPrice = null) =>
console.info('✔ Deploying wETH contract...') ||
getEnvConfiguration()
.then(() => getEnvironmentVariable(ENDPOINT_ENV_VAR_KEY))
.then(getProvider)
.then(checkEndpoint)
.then(getEthersWallet)
.then(getWethContractFactory)
.then(deployEthersContract)
.then(_contractFactory => deployEthersContract(_contractFactory, [], _maybeGasPrice))
.then(_contract => _contract.deployTransaction.wait())
.then(_receipt => console.info(`✔ Tx Mined! Contract address: ${prop('contractAddress', _receipt)}`))

Expand Down
12 changes: 10 additions & 2 deletions lib/peg-out.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,23 @@ const { getPTokenContract } = require('./get-ptoken-contract')
const { callFxnInContractAndAwaitReceipt } = require('./contract-utils')
const { checkTokenBalanceIsSufficient } = require('./check-token-balance')

const pegOut = (_deployedContractAddress, _amount, _recipient, _destinationChainId, _userData) =>
const pegOut = (
_deployedContractAddress,
_amount,
_recipient,
_destinationChainId,
_userData,
_maybeGasPrice = null,
) =>
checkIsHex(_userData)
.then(_ => getPTokenContract(_deployedContractAddress))
.then(checkTokenBalanceIsSufficient(_amount))
.then(_contract =>
callFxnInContractAndAwaitReceipt(
'redeem(uint256,bytes,string,bytes4)',
[ _amount, _userData, _recipient, _destinationChainId ],
_contract
_maybeGasPrice,
_contract,
)
)
.then(_receipt => console.info('✔ Success! Transaction receipt:\n', _receipt))
Expand Down
8 changes: 6 additions & 2 deletions lib/send-eth.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,18 @@ const { getEthersWallet } = require('./get-ethers-wallet')
const { getEnvConfiguration } = require('./get-env-configuration')
const { getEnvironmentVariable } = require('./get-environment-variable')

const sendEth = (_address, _amount) =>
const sendEth = (_address, _amount, _maybeGasPrice = null) =>
console.info(`✔ Sending ${_amount} WEI to ${_address}...`) ||
getEnvConfiguration()
.then(() => getEnvironmentVariable(ENDPOINT_ENV_VAR_KEY))
.then(getProvider)
.then(checkEndpoint)
.then(getEthersWallet)
.then(_wallet => _wallet.sendTransaction({ to: _address, value: BigNumber.from(_amount) }))
.then(_wallet => {
const txParams = { to: _address, value: BigNumber.from(_amount) }
if (_maybeGasPrice !== null) txParams['gasPrice'] = _maybeGasPrice
return _wallet.sendTransaction(txParams)
})
.then(_tx => console.info('✔ Tx sent, awaiting mining...') || _tx.wait())
.then(_receipt => console.info('✔ Success! Transaction receipt:\n', _receipt))

Expand Down
4 changes: 2 additions & 2 deletions lib/set-admin-operator.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
const { getPTokenContract } = require('./get-ptoken-contract')
const { callFxnInContractAndAwaitReceipt } = require('./contract-utils')

const setAdminOperator = (_deployedContractAddress, _ethAddress) =>
const setAdminOperator = (_deployedContractAddress, _ethAddress, _maybeGasPrice = null) =>
console.info('✔ Getting origin chain ID...') ||
getPTokenContract(_deployedContractAddress)
.then(callFxnInContractAndAwaitReceipt('setAdminOperator', [ _ethAddress ]))
.then(callFxnInContractAndAwaitReceipt('setAdminOperator', [ _ethAddress ], _maybeGasPrice))
.then(console.info)

module.exports = { setAdminOperator }
5 changes: 5 additions & 0 deletions lib/show-existing-logic-contract-addresses.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,11 @@ const EXISTING_PTOKEN_LOGIC_CONTRACTS = [
'version': 'v2',
'address': '0x63D07f504D548e041b38cDBf267eFc595E4933c3',
},
{
'chain': 'fantom',
'version': 'v2',
'address': '0x46204f9F5F21DC65E37dc7bE3AD8F72E324876bd',
},
]

const showExistingPTokenContractAddresses = _ =>
Expand Down
9 changes: 7 additions & 2 deletions lib/transfer-token.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,16 @@ const { getPTokenContract } = require('./get-ptoken-contract')
const { callFxnInContractAndAwaitReceipt } = require('./contract-utils')
const { checkTokenBalanceIsSufficient } = require('./check-token-balance')

const transferToken = (_deployedContractAddress, _recipient, _amount) =>
const transferToken = (_deployedContractAddress, _recipient, _amount, _maybeGasPrice = null) =>
getPTokenContract(_deployedContractAddress)
.then(checkTokenBalanceIsSufficient(_amount))
.then(_contract =>
callFxnInContractAndAwaitReceipt('transfer(address,uint256)', [ _recipient, _amount ], _contract)
callFxnInContractAndAwaitReceipt(
'transfer(address,uint256)',
[ _recipient, _amount ],
_maybeGasPrice,
_contract,
)
)
.then(_receipt => console.info('✔ Success! Transaction receipt:\n', _receipt))

Expand Down
5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
{
"name": "ptokens-erc777-smart-contract",
"version": "3.5.0",
"version": "3.6.0",
"description": "The pToken ERC777 smart-contract & CLI",
"main": "cli.js",
"scripts": {
"compile": "npx hardhat compile",
"tests": "ENDPOINT=http://localhost:8545 npx hardhat test",
"test": "npm run tests"
"test": "npm run tests",
"lint": "npx eslint ./"
},
"repository": {
"type": "git",
Expand Down
Loading

0 comments on commit e7a6c24

Please sign in to comment.