@@ -4,18 +4,39 @@ import {
44 BasicBackendApi ,
55 BasicKVIterStorage ,
66 BasicQuerier ,
7- IBackend ,
87} from '../../src/backend' ;
98import { fromBase64 } from '@cosmjs/encoding' ;
109import { Region } from '../../src/memory' ;
1110import { expectResponseToBeOk , parseBase64Response } from '../common/test-vm' ;
1211
12+ type HackatomQueryRequest = {
13+ bank : {
14+ all_balances : {
15+ address : string
16+ }
17+ }
18+ }
19+ class HackatomMockQuerier extends BasicQuerier {
20+ private balances : Map < string , { amount : string , denom : string } [ ] > = new Map ( ) ;
21+
22+ update_balance ( addr : string , balance : { amount : string ; denom : string ; } [ ] ) : { amount : string ; denom : string ; } [ ] {
23+ this . balances . set ( addr , balance ) ;
24+ return balance ;
25+ }
26+
27+ handleQuery ( queryRequest : HackatomQueryRequest ) : any {
28+ if ( 'bank' in queryRequest ) {
29+ if ( 'all_balances' in queryRequest . bank ) {
30+ const { address } = queryRequest . bank . all_balances ;
31+ return { amount : this . balances . get ( address ) || [ ] }
32+ }
33+ }
34+
35+ throw new Error ( `unknown query: ${ JSON . stringify ( queryRequest ) } ` ) ;
36+ }
37+ }
38+
1339const wasmBytecode = readFileSync ( 'testdata/v1.1/hackatom.wasm' ) ;
14- const backend : IBackend = {
15- backend_api : new BasicBackendApi ( 'terra' ) ,
16- storage : new BasicKVIterStorage ( ) ,
17- querier : new BasicQuerier ( ) ,
18- } ;
1940
2041const verifier = 'terra1kzsrgcktshvqe9p089lqlkadscqwkezy79t8y9' ;
2142const beneficiary = 'terra1zdpgj8am5nqqvht927k3etljyl6a52kwqup0je' ;
@@ -38,11 +59,19 @@ const mockInfo: { sender: string, funds: { amount: string, denom: string }[] } =
3859
3960let vm : VMInstance ;
4061describe ( 'hackatom' , ( ) => {
62+ let querier : HackatomMockQuerier ;
63+
4164 beforeEach ( async ( ) => {
42- vm = new VMInstance ( backend ) ;
65+ querier = new HackatomMockQuerier ( ) ;
66+ vm = new VMInstance ( {
67+ backend_api : new BasicBackendApi ( 'terra' ) ,
68+ storage : new BasicKVIterStorage ( ) ,
69+ querier
70+ } ) ;
4371 await vm . build ( wasmBytecode ) ;
4472 } ) ;
4573
74+
4675 it ( 'proper_initialization' , async ( ) => {
4776 // Act
4877 const instantiateResponse = vm . instantiate ( mockEnv , mockInfo , { verifier, beneficiary } ) ;
@@ -93,7 +122,7 @@ describe('hackatom', () => {
93122 // Arrange
94123 const richAddress = 'foobar' ;
95124 const richBalance = [ { amount : '10000' , denom : 'gold' } ] ;
96- vm . backend . querier . update_balance ( richAddress , richBalance ) ;
125+ querier . update_balance ( richAddress , richBalance ) ;
97126
98127 vm . instantiate ( mockEnv , mockInfo , { verifier, beneficiary } ) ;
99128
@@ -123,7 +152,7 @@ describe('hackatom', () => {
123152 it ( 'execute_release_works' , async ( ) => {
124153 // Arrange
125154 vm . instantiate ( mockEnv , mockInfo , { verifier, beneficiary } ) ;
126- vm . backend . querier . update_balance ( mockContractAddr , [ { amount : '1000' , denom : 'earth' } ] ) ;
155+ querier . update_balance ( mockContractAddr , [ { amount : '1000' , denom : 'earth' } ] ) ;
127156
128157 // Act
129158 const execResponse = vm . execute (
@@ -149,7 +178,7 @@ describe('hackatom', () => {
149178 it ( 'execute_release_fails_for_wrong_sender' , async ( ) => {
150179 // Arrange
151180 vm . instantiate ( mockEnv , mockInfo , { verifier, beneficiary } ) ;
152- vm . backend . querier . update_balance ( mockContractAddr , [ { amount : '1000' , denom : 'earth' } ] ) ;
181+ querier . update_balance ( mockContractAddr , [ { amount : '1000' , denom : 'earth' } ] ) ;
153182
154183 // Act
155184 const execResponse = vm . execute (
0 commit comments