@@ -7,7 +7,10 @@ import { Dot, Tdot, KeyPair } from '../../src';
77import * as testData from '../fixtures' ;
88import { chainName , txVersion , genesisHash , specVersion } from '../resources' ;
99import * as sinon from 'sinon' ;
10- import { Wallet } from '@bitgo/sdk-core' ;
10+ import { TransactionType , Wallet } from '@bitgo/sdk-core' ;
11+ import { coins } from '@bitgo/statics' ;
12+ import { buildTransaction , type BuildContext , type Material } from '@bitgo/wasm-dot' ;
13+ import utils from '../../src/lib/utils' ;
1114
1215describe ( 'DOT:' , function ( ) {
1316 let bitgo : TestBitGoAPI ;
@@ -152,7 +155,7 @@ describe('DOT:', function () {
152155
153156 describe ( 'Explain Transactions:' , ( ) => {
154157 it ( 'should explain an unsigned transfer transaction' , async function ( ) {
155- const explainedTransaction = await basecoin . explainTransaction ( testData . unsignedTransaction ) ;
158+ const explainedTransaction = await prodCoin . explainTransaction ( testData . unsignedTransaction ) ;
156159 explainedTransaction . should . deepEqual ( {
157160 displayOrder : [
158161 'outputAmount' ,
@@ -185,6 +188,67 @@ describe('DOT:', function () {
185188 } ) ;
186189 } ) ;
187190
191+ describe ( 'Explain Transactions (WASM):' , ( ) => {
192+ const coin = coins . get ( 'tdot' ) ;
193+ const material = utils . getMaterial ( coin ) ;
194+ const SENDER = testData . accounts . account1 . address ;
195+ const RECIPIENT = testData . accounts . account2 . address ;
196+
197+ function wasmContext ( nonce = 0 ) : BuildContext {
198+ return {
199+ sender : SENDER ,
200+ nonce,
201+ material : material as Material ,
202+ validity : { firstValid : testData . westendBlock . blockNumber , maxDuration : 2400 } ,
203+ referenceBlock : testData . westendBlock . hash ,
204+ } ;
205+ }
206+
207+ it ( 'should explain a transfer via explainTransactionWithWasm' , function ( ) {
208+ const tx = buildTransaction ( { type : 'transfer' , to : RECIPIENT , amount : 1000000000000n } , wasmContext ( ) ) ;
209+ const explained = basecoin . explainTransactionWithWasm ( tx . toHex ( ) , SENDER ) ;
210+
211+ assert . strictEqual ( explained . type , TransactionType . Send ) ;
212+ assert . strictEqual ( explained . outputs . length , 1 ) ;
213+ assert . strictEqual ( explained . outputs [ 0 ] . address , RECIPIENT ) ;
214+ assert . strictEqual ( explained . outputs [ 0 ] . amount , '1000000000000' ) ;
215+ assert . strictEqual ( explained . outputAmount , '1000000000000' ) ;
216+ assert . strictEqual ( explained . sender , SENDER ) ;
217+ assert . strictEqual ( explained . methodName , 'balances.transferKeepAlive' ) ;
218+ } ) ;
219+
220+ it ( 'should explain a staking bond via explainTransactionWithWasm' , function ( ) {
221+ const tx = buildTransaction ( { type : 'stake' , amount : 5000000000000n , payee : { type : 'stash' } } , wasmContext ( 1 ) ) ;
222+ const explained = basecoin . explainTransactionWithWasm ( tx . toHex ( ) , SENDER ) ;
223+
224+ assert . strictEqual ( explained . type , TransactionType . StakingActivate ) ;
225+ assert . strictEqual ( explained . outputs . length , 1 ) ;
226+ assert . strictEqual ( explained . outputs [ 0 ] . address , 'STAKING' ) ;
227+ assert . strictEqual ( explained . outputs [ 0 ] . amount , '5000000000000' ) ;
228+ } ) ;
229+
230+ it ( 'should explain a transfer via coin class explainTransaction (WASM path)' , async function ( ) {
231+ const tx = buildTransaction ( { type : 'transfer' , to : RECIPIENT , amount : 1000000000000n } , wasmContext ( ) ) ;
232+ const unsignedTransaction = {
233+ serializedTxHex : tx . toHex ( ) ,
234+ signableHex : tx . toHex ( ) ,
235+ derivationPath : 'm/0' ,
236+ parsedTx : { outputs : [ ] , spendAmount : '0' , inputs : [ ] } ,
237+ entryValues : undefined ,
238+ coinSpecific : { blockNumber : 12345 } ,
239+ } ;
240+ const explained = await basecoin . explainTransaction ( unsignedTransaction ) ;
241+
242+ assert . strictEqual ( explained . type , 'Send' ) ;
243+ assert . strictEqual ( explained . outputs . length , 1 ) ;
244+ assert . strictEqual ( explained . outputs [ 0 ] . address , RECIPIENT ) ;
245+ assert . strictEqual ( explained . outputs [ 0 ] . amount , '1000000000000' ) ;
246+ assert . strictEqual ( explained . outputs [ 0 ] . valueString , '1000000000000' ) ;
247+ assert . strictEqual ( explained . sequenceId , 0 ) ;
248+ assert . strictEqual ( explained . blockNumber , 12345 ) ;
249+ } ) ;
250+ } ) ;
251+
188252 describe ( 'Recover Transactions:' , ( ) => {
189253 const sandBox = sinon . createSandbox ( ) ;
190254 const destAddr = testData . accounts . account1 . address ;
0 commit comments