From 9033cd799be5974ebf28a49df181eeb63b1fce84 Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Wed, 28 Jun 2023 13:45:53 +0600 Subject: [PATCH] fix(contract): use fallback account if `onAccount` not provided --- src/contract/Contract.ts | 1 + test/integration/Middleware.ts | 2 +- test/integration/contract-aci.ts | 8 ++++++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/contract/Contract.ts b/src/contract/Contract.ts index ebaf067282..443138b734 100644 --- a/src/contract/Contract.ts +++ b/src/contract/Contract.ts @@ -324,6 +324,7 @@ class Contract { const useFallbackAccount = callStatic === true && ( (error instanceof TypeError && error.message === 'Account should be an address (ak-prefixed string), or instance of AccountBase, got undefined instead') || (error instanceof NoWalletConnectedError) + || (error instanceof InternalError && error.message === 'Use fallback account') ); if (!useFallbackAccount) throw error; callerId = DRY_RUN_ACCOUNT.pub; diff --git a/test/integration/Middleware.ts b/test/integration/Middleware.ts index 415ef9de8a..2e0a83c87b 100644 --- a/test/integration/Middleware.ts +++ b/test/integration/Middleware.ts @@ -17,7 +17,7 @@ describe('MiddlewareSubscriber', () => { }, mdwGensPerMinute: res.mdwGensPerMinute, mdwHeight: res.mdwHeight, - mdwLastMigration: 20230519120000, + mdwLastMigration: res.mdwLastMigration, mdwRevision: res.mdwRevision, mdwSynced: true, mdwSyncing: true, diff --git a/test/integration/contract-aci.ts b/test/integration/contract-aci.ts index 2f1e7191b6..d71526037e 100644 --- a/test/integration/contract-aci.ts +++ b/test/integration/contract-aci.ts @@ -269,6 +269,14 @@ describe('Contract instance', () => { expect(res.tx.fee).to.be.equal('182000000000000'); }); + it('calls with fallback account if onAccount is not provided', async () => { + const account = testContract.$options.onAccount; + delete testContract.$options.onAccount; + const res = await testContract.intFn(2); + expect(res.decodedResult).to.be.equal(2n); + testContract.$options.onAccount = account; + }); + it('calls on chain', async () => { const res = await testContract.intFn(2, { callStatic: false }); expect(res.decodedResult).to.be.equal(2n);