diff --git a/CHANGELOG.md b/CHANGELOG.md index f6c35fc..bddeb09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 2.2.0 + +- Add a method to receive the tx receipt to the Transaction object + ## 2.1.4 - Support legacy versions by coercing them to full semver diff --git a/README.md b/README.md index d445d6f..c480022 100644 --- a/README.md +++ b/README.md @@ -144,6 +144,8 @@ const tx = await eas.attest({ const newAttestationUID = await tx.wait(); console.log("New attestation UID:", newAttestationUID); + +console.log("Transaction receipt:", tx.receipt); ``` ### Creating Offchain Attestations diff --git a/dist/transaction.d.ts b/dist/transaction.d.ts index e60ac7b..cac610d 100644 --- a/dist/transaction.d.ts +++ b/dist/transaction.d.ts @@ -7,6 +7,7 @@ export interface TransactionSigner { } export declare class Transaction { readonly data: ContractTransaction; + receipt?: TransactionReceipt; private readonly signer; private readonly waitCallback; constructor(data: ContractTransaction, signer: TransactionSigner, waitCallback: (receipt: TransactionReceipt) => Promise); diff --git a/dist/transaction.js b/dist/transaction.js index b0ac885..04c5be3 100644 --- a/dist/transaction.js +++ b/dist/transaction.js @@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.Base = exports.Transaction = void 0; class Transaction { data; + receipt; signer; waitCallback; constructor(data, signer, waitCallback) { @@ -11,12 +12,15 @@ class Transaction { this.waitCallback = waitCallback; } async wait(confirmations) { + if (this.receipt) { + throw new Error(`Transaction already broadcast: ${this.receipt}`); + } const tx = await this.signer.sendTransaction(this.data); - const receipt = await tx.wait(confirmations); - if (!receipt) { + this.receipt = await tx.wait(confirmations); + if (!this.receipt) { throw new Error(`Unable to confirm: ${tx}`); } - return this.waitCallback(receipt); + return this.waitCallback(this.receipt); } } exports.Transaction = Transaction; diff --git a/dist/transaction.js.map b/dist/transaction.js.map index 0ff6e94..cba9bd3 100644 --- a/dist/transaction.js.map +++ b/dist/transaction.js.map @@ -1 +1 @@ -{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":";;;AAiBA,MAAa,WAAW;IACN,IAAI,CAAsB;IACzB,MAAM,CAAoB;IAC1B,YAAY,CAA8C;IAE3E,YACE,IAAyB,EACzB,MAAyB,EACzB,YAAyD;QAEzD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,aAAsB;QACtC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;CACF;AAxBD,kCAwBC;AAED,MAAa,IAAI;IACR,QAAQ,CAAI;IACT,MAAM,CAAqB;IAErC,YAAY,OAAwB,EAAE,OAAe,EAAE,MAA0B;QAC/E,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAM,CAAC;QAC7C,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAErB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACvB,CAAC;IACH,CAAC;IAED,wCAAwC;IACjC,OAAO,CAAC,MAAyB;QACtC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAmC,CAAM,CAAC;QAEhF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oBAAoB;IACb,KAAK,CAAC,UAAU;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;QAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC;IAC/C,CAAC;CACF;AA/BD,oBA+BC"} \ No newline at end of file +{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":";;;AAiBA,MAAa,WAAW;IACN,IAAI,CAAsB;IACnC,OAAO,CAAsB;IACnB,MAAM,CAAoB;IAC1B,YAAY,CAA8C;IAE3E,YACE,IAAyB,EACzB,MAAyB,EACzB,YAAyD;QAEzD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,aAAsB;QACtC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;CACF;AA7BD,kCA6BC;AAED,MAAa,IAAI;IACR,QAAQ,CAAI;IACT,MAAM,CAAqB;IAErC,YAAY,OAAwB,EAAE,OAAe,EAAE,MAA0B;QAC/E,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAM,CAAC;QAC7C,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAErB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACvB,CAAC;IACH,CAAC;IAED,wCAAwC;IACjC,OAAO,CAAC,MAAyB;QACtC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAmC,CAAM,CAAC;QAEhF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oBAAoB;IACb,KAAK,CAAC,UAAU;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;QAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC;IAC/C,CAAC;CACF;AA/BD,oBA+BC"} \ No newline at end of file diff --git a/package.json b/package.json index 7903422..26d2308 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@ethereum-attestation-service/eas-sdk", - "version": "2.1.4", + "version": "2.2.0", "description": "Ethereum Attestation Service - TypeScript/JavaScript SDK", "repository": "git@github.com:ethereum-attestation-service/eas-sdk.git", "author": "Leonid Beder ", diff --git a/src/transaction.ts b/src/transaction.ts index bc7bc66..a4842fa 100644 --- a/src/transaction.ts +++ b/src/transaction.ts @@ -17,6 +17,7 @@ export interface TransactionSigner { export class Transaction { public readonly data: ContractTransaction; + public receipt?: TransactionReceipt; private readonly signer: TransactionSigner; private readonly waitCallback: (receipt: TransactionReceipt) => Promise; @@ -31,13 +32,17 @@ export class Transaction { } public async wait(confirmations?: number): Promise { + if (this.receipt) { + throw new Error(`Transaction already broadcast: ${this.receipt}`); + } + const tx = await this.signer.sendTransaction(this.data); - const receipt = await tx.wait(confirmations); - if (!receipt) { + this.receipt = await tx.wait(confirmations); + if (!this.receipt) { throw new Error(`Unable to confirm: ${tx}`); } - return this.waitCallback(receipt); + return this.waitCallback(this.receipt); } }