nim-ethers/testmodule/testJsonRpcSigner.nim

82 lines
2.9 KiB
Nim
Raw Permalink Normal View History

2022-01-20 13:39:37 +00:00
import pkg/asynctest
import pkg/ethers
2022-01-26 10:21:28 +00:00
import pkg/stew/byteutils
2022-01-24 13:40:47 +00:00
import ./examples
2022-01-20 13:39:37 +00:00
suite "JsonRpcSigner":
var provider: JsonRpcProvider
2022-01-24 11:14:31 +00:00
var accounts: seq[Address]
2022-01-20 13:39:37 +00:00
setup:
provider = JsonRpcProvider.new()
2022-01-24 11:14:31 +00:00
accounts = await provider.listAccounts()
2022-01-20 13:39:37 +00:00
test "is connected to the first account of the provider by default":
let signer = provider.getSigner()
2022-01-24 11:14:31 +00:00
check (await signer.getAddress()) == accounts[0]
2022-01-20 13:39:37 +00:00
test "can connect to a different account":
2022-01-24 11:14:31 +00:00
let signer = provider.getSigner(accounts[1])
check (await signer.getAddress()) == accounts[1]
2022-01-24 11:12:52 +00:00
test "can retrieve gas price":
let signer = provider.getSigner()
let gasprice = await signer.getGasPrice()
check gasprice > 0.u256
2022-01-24 11:14:31 +00:00
test "can retrieve transaction count":
let signer = provider.getSigner(accounts[9])
let count = await signer.getTransactionCount(BlockTag.pending)
check count == 0.u256
2022-01-24 13:40:47 +00:00
test "can estimate gas cost of a transaction":
let signer = provider.getSigner()
let estimate = await signer.estimateGas(Transaction.example)
check estimate > 0.u256
2022-01-24 16:29:25 +00:00
test "can retrieve chain id":
let signer = provider.getSigner()
let chainId = await signer.getChainId()
check chainId == 31337.u256 # hardhat chain id
2022-01-25 09:25:09 +00:00
2022-01-26 10:21:28 +00:00
test "can sign messages":
let signer = provider.getSigner()
let message = "hello".toBytes
check (await signer.signMessage(message)).len == 65
2022-01-25 09:25:09 +00:00
test "can populate missing fields in a transaction":
let signer = provider.getSigner()
let transaction = Transaction.example
let populated = await signer.populateTransaction(transaction)
check !populated.sender == await signer.getAddress()
check !populated.gasPrice == await signer.getGasPrice()
check !populated.nonce == await signer.getTransactionCount(BlockTag.pending)
check !populated.gasLimit == await signer.estimateGas(transaction)
check !populated.chainId == await signer.getChainId()
test "populate does not overwrite existing fields":
let signer = provider.getSigner()
var transaction = Transaction.example
transaction.sender = some await signer.getAddress()
transaction.nonce = some UInt256.example
transaction.chainId = some await signer.getChainId()
transaction.gasPrice = some UInt256.example
transaction.gasLimit = some UInt256.example
let populated = await signer.populateTransaction(transaction)
check populated == transaction
test "populate fails when sender does not match signer address":
let signer = provider.getSigner()
var transaction = Transaction.example
transaction.sender = accounts[1].some
expect SignerError:
discard await signer.populateTransaction(transaction)
test "populate fails when chain id does not match":
let signer = provider.getSigner()
var transaction = Transaction.example
transaction.chainId = 0xdeadbeef.u256.some
expect SignerError:
discard await signer.populateTransaction(transaction)