ethers.js/src.ts/_tests/test-providers-send.ts
2023-08-02 23:51:09 -04:00

63 lines
1.9 KiB
TypeScript

import assert from "assert";
import { isError, Wallet } from "../index.js";
import { getProvider, providerNames, setupProviders } from "./create-provider.js";
import type { TransactionResponse } from "../index.js";
function stall(duration: number): Promise<void> {
return new Promise((resolve) => { setTimeout(resolve, duration); });
}
setupProviders();
describe("Sends Transactions", function() {
const wallet = new Wallet(<string>(process.env.FAUCET_PRIVATEKEY));
console.log("Faucet Address:", wallet.address);
const networkName = "goerli";
for (const providerName of providerNames) {
const provider = getProvider(providerName, networkName);
if (provider == null) { continue; }
it(`tests sending: ${ providerName }`, async function() {
this.timeout(180000);
const w = wallet.connect(provider);
const dustAddr = Wallet.createRandom().address;
// Retry if another CI instance used our value
let tx: null | TransactionResponse = null;
for (let i = 0; i < 10; i++) {
try {
tx = await w.sendTransaction({
to: dustAddr,
value: 42,
type: 2
});
break;
} catch (error) {
if (isError(error, "REPLACEMENT_UNDERPRICED") || isError(error, "NONCE_EXPIRED")) {
await stall(1000);
continue;
}
throw error;
}
}
assert.ok(!!tx, "too many retries");
//const receipt =
await provider.waitForTransaction(tx.hash, null, 60000); //tx.wait();
//console.log(receipt);
const balance = await provider.getBalance(dustAddr);
assert.equal(balance, BigInt(42), "target balance after send");
});
}
});