packageDocumentation module ignore import { TransactionFactory , Transaction , TxStatus } from '../src' ; import { Wallet } from '@harmony-js/account' ; import { HttpProvider , Messenger } from '@harmony-js/network' ; import { ChainType , ChainID } from '@harmony-js/utils' ; import { toChecksumAddress , randomBytes } from '@harmony-js/crypto' ; import fetch from 'jest-fetch-mock' ; const http = new HttpProvider ( 'http://mock.com' ) ; const addr = toChecksumAddress ( '0x' + randomBytes ( 20 ) ) ; const msgHttp = new Messenger ( http , ChainType . Harmony , ChainID . HmyLocal ) ; const walletHttp = new Wallet ( msgHttp ) ; describe ( 'test send transaction' , ( ) => { beforeEach ( ( ) => { } ) ; afterEach ( ( ) => { fetch . resetMocks ( ) ; } ) ; it ( 'should test wallet sign and send' , async ( ) => { const responses = [ { jsonrpc : '2.0' , id : 1 , result : 1 , } , { jsonrpc : '2.0' , id : 1 , result : '0x7e1ef610f700805b93cf85b1e55bce84fcbd04373252a968755366a8d2215424' , } , ] . map ( ( res ) => [ JSON . stringify ( res ) ] as [ string ] ) ; fetch . mockResponses ( ... responses ) ; const factory = new TransactionFactory ( msgHttp ) ; const tx = factory . newTx ( { to : addr , value : '1' , gasLimit : '21000' , gasPrice : '1' , } , false ) ; expect ( tx . txStatus ) . toEqual ( TxStatus . INTIALIZED ) ; const account = await walletHttp . createAccount ( ) ; const signed = await account . signTransaction ( tx , true , 'rlp' , 'latest' ) ; expect ( signed . txStatus ) . toEqual ( TxStatus . SIGNED ) ; expect ( signed . txParams . nonce ) . toEqual ( 1 ) ; expect ( signed . txPayload . nonce ) . toEqual ( '0x1' ) ; expect ( signed . txParams . signature . r ) . toBeTruthy ( ) ; expect ( signed . txParams . signature . s ) . toBeTruthy ( ) ; expect ( signed . txParams . signature . v ) . toBeTruthy ( ) ; expect ( signed . txParams . rawTransaction ) . toEqual ( signed . getRawTransaction ( ) ) ; const [ sent , hash ] = await signed . sendTransaction ( ) ; expect ( sent . txParams . id ) . toEqual ( hash ) ; expect ( sent . txStatus ) . toEqual ( TxStatus . PENDING ) ; } ) ; it ( 'should test wallet sign and send shardingTransaction' , async ( ) => { const factory = new TransactionFactory ( msgHttp ) ; const tx = factory . newTx ( { to : addr + '-1' , value : '1' , gasLimit : '21000' , gasPrice : '1' , } , true ) ; expect ( tx . cxStatus ) . toEqual ( TxStatus . INTIALIZED ) ; } ) ; it ( 'should reject and confirm tx' , async ( ) => { const responses = [ { jsonrpc : '2.0' , id : 1 , result : [ { current : true , http : 'http://localhost' , shardID : 0 , ws : 'ws://localhost' , } , { current : false , http : 'http://localhost' , shardID : 1 , ws : 'ws://localhost' , } , ] , } , { jsonrpc : '2.0' , id : 5 , result : '0x0' , } , { jsonrpc : '2.0' , id : 5 , result : '0x1' , } , { jsonrpc : '2.0' , id : 5 , result : null , } , { jsonrpc : '2.0' , id : 5 , result : '0x1' , } , { jsonrpc : '2.0' , id : 5 , result : '0x2' , } , { jsonrpc : '2.0' , id : 5 , result : null , } , { jsonrpc : '2.0' , id : 5 , result : '0x2' , } , { jsonrpc : '2.0' , id : 5 , result : '0x3' , } , { jsonrpc : '2.0' , id : 5 , result : null , } , { jsonrpc : '2.0' , id : 5 , result : '0x3' , } , { jsonrpc : '2.0' , id : 5 , result : '0x4' , } , { jsonrpc : '2.0' , id : 5 , result : '0x5' , } , { jsonrpc : '2.0' , id : 3 , result : { blockHash : '0x7ef01c8532dbe8ae9930ebf3d38cf5f3937193c3c90680d4e9d5206552e4f6a6' , blockNumber : '0x1d3c0' , contractAddress : null , cumulativeGasUsed : '0x5208' , from : 'one1z05g55zamqzfw9qs432n33gycdmyvs38xjemyl' , gasUsed : '0x5208' , logs : [ ] , logsBloom : '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' , shardID : 0 , status : '0x1' , to : 'one1z05g55zamqzfw9qs432n33gycdmyvs38xjemyl' , transactionHash : '0x1bb3cadb2031e5ce987b0c557abe134986b9834963dd0d54f75a9c7d966606ce' , transactionIndex : '0x0' , } , } , { jsonrpc : '2.0' , id : 5 , result : '0x5' , } , ] . map ( ( res ) => [ JSON . stringify ( res ) ] as [ string ] ) ; fetch . mockResponses ( ... responses ) ; const hash = '0x7e1ef610f700805b93cf85b1e55bce84fcbd04373252a968755366a8d2215424' ; const factory = new TransactionFactory ( msgHttp ) ; const shardID = 0 ; const toShardID = 1 ; const tx = factory . newTx ( { shardID , toShardID } , false ) ; expect ( tx . cxStatus ) . toEqual ( TxStatus . INTIALIZED ) ; await tx . messenger . setShardingProviders ( ) ; await expect ( tx . txConfirm ( hash , 3 , 100 , shardID ) ) . rejects . toThrow ( 'The transaction is still not confirmed after 3 attempts.' ) ; const confirmed = await tx . txConfirm ( hash , 4 , 100 , shardID ) ; expect ( confirmed . txStatus ) . toEqual ( TxStatus . CONFIRMED ) ; } ) ; it ( 'should reject and confirm cx' , async ( ) => { const responses = [ { jsonrpc : '2.0' , id : 1 , result : [ { current : true , http : 'http://localhost' , shardID : 0 , ws : 'ws://localhost' , } , { current : false , http : 'http://localhost' , shardID : 1 , ws : 'ws://localhost' , } , ] , } , { jsonrpc : '2.0' , id : 5 , result : '0x0' , } , { jsonrpc : '2.0' , id : 5 , result : '0x1' , } , { jsonrpc : '2.0' , id : 5 , result : null , } , { jsonrpc : '2.0' , id : 5 , result : '0x1' , } , { jsonrpc : '2.0' , id : 5 , result : '0x2' , } , { jsonrpc : '2.0' , id : 5 , result : null , } , { jsonrpc : '2.0' , id : 5 , result : '0x2' , } , { jsonrpc : '2.0' , id : 5 , result : '0x3' , } , { jsonrpc : '2.0' , id : 5 , result : null , } , { jsonrpc : '2.0' , id : 5 , result : '0x3' , } , { jsonrpc : '2.0' , id : 5 , result : '0x4' , } , { jsonrpc : '2.0' , id : 5 , result : '0x5' , } , { jsonrpc : '2.0' , id : 6 , result : { blockHash : '0xd92f3610d52bde907ab42e064d73c2314c058015a7162ee8a4500bc581903cc2' , blockNumber : '0x18465' , hash : '0xcff4a3a6fd4eb34b9a7e48e3eca0c8c899de71a1ea21a126cc1048e65b332a72' , from : 'one1v5fevthrnfeqjwcl5p0sfq3u34c2gmtqq095at' , to : 'one18spwh74s5hkg2nva40scx7hwdjpup28dw4dfsg' , shardID : 0 , toShardID : 1 , value : '0xde0b6b3a7640000' , } , } , { jsonrpc : '2.0' , id : 5 , result : '0x5' , } , ] . map ( ( res ) => [ JSON . stringify ( res ) ] as [ string ] ) ; fetch . mockResponses ( ... responses ) ; const hash = '0x7e1ef610f700805b93cf85b1e55bce84fcbd04373252a968755366a8d2215424' ; const factory = new TransactionFactory ( msgHttp ) ; const shardID = 0 ; const toShardID = 1 ; const tx = factory . newTx ( { shardID , toShardID } , false ) ; expect ( tx . cxStatus ) . toEqual ( TxStatus . INTIALIZED ) ; await tx . messenger . setShardingProviders ( ) ; await expect ( tx . cxConfirm ( hash , 3 , 100 , toShardID ) ) . rejects . toThrow ( 'The transaction is still not confirmed after 3 attempts.' ) ; const confirmed = await tx . cxConfirm ( hash , 4 , 100 , toShardID ) ; expect ( confirmed . cxStatus ) . toEqual ( TxStatus . CONFIRMED ) ; } ) ; it ( 'should confirm and confirm cx' , async ( ) => { const responses = [ { jsonrpc : '2.0' , id : 1 , result : [ { current : true , http : 'http://localhost' , shardID : 0 , ws : 'ws://localhost' , } , { current : false , http : 'http://localhost' , shardID : 1 , ws : 'ws://localhost' , } , ] , } , { jsonrpc : '2.0' , id : 5 , result : '0x0' , } , { jsonrpc : '2.0' , id : 5 , result : '0x1' , } , { jsonrpc : '2.0' , id : 3 , result : { blockHash : '0x7ef01c8532dbe8ae9930ebf3d38cf5f3937193c3c90680d4e9d5206552e4f6a6' , blockNumber : '0x1d3c0' , contractAddress : null , cumulativeGasUsed : '0x5208' , from : 'one1z05g55zamqzfw9qs432n33gycdmyvs38xjemyl' , gasUsed : '0x5208' , logs : [ ] , logsBloom : '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' , shardID : 0 , status : '0x1' , to : 'one1z05g55zamqzfw9qs432n33gycdmyvs38xjemyl' , transactionHash : '0x1bb3cadb2031e5ce987b0c557abe134986b9834963dd0d54f75a9c7d966606ce' , transactionIndex : '0x0' , } , } , { jsonrpc : '2.0' , id : 5 , result : '0x1' , } , { jsonrpc : '2.0' , id : 5 , result : '0x4' , } , { jsonrpc : '2.0' , id : 5 , result : '0x5' , } , { jsonrpc : '2.0' , id : 6 , result : { blockHash : '0xd92f3610d52bde907ab42e064d73c2314c058015a7162ee8a4500bc581903cc2' , blockNumber : '0x18465' , hash : '0xcff4a3a6fd4eb34b9a7e48e3eca0c8c899de71a1ea21a126cc1048e65b332a72' , from : 'one1v5fevthrnfeqjwcl5p0sfq3u34c2gmtqq095at' , to : 'one18spwh74s5hkg2nva40scx7hwdjpup28dw4dfsg' , shardID : 0 , toShardID : 1 , value : '0xde0b6b3a7640000' , } , } , { jsonrpc : '2.0' , id : 5 , result : '0x5' , } , ] . map ( ( res ) => [ JSON . stringify ( res ) ] as [ string ] ) ; fetch . mockResponses ( ... responses ) ; const hash = '0x7e1ef610f700805b93cf85b1e55bce84fcbd04373252a968755366a8d2215424' ; const factory = new TransactionFactory ( msgHttp ) ; const shardID = 0 ; const toShardID = 1 ; const tx = factory . newTx ( { shardID , toShardID } , false ) ; expect ( tx . txStatus ) . toEqual ( TxStatus . INTIALIZED ) ; expect ( tx . cxStatus ) . toEqual ( TxStatus . INTIALIZED ) ; await tx . messenger . setShardingProviders ( ) ; tx . observed ( ) . on ( 'track' , ( track ) => { expect ( track ) . toBeTruthy ( ) ; } ) . on ( 'confirmation' , ( confirmation ) => { expect ( confirmation ) . toBeTruthy ( ) ; } ) ; const confirmed = await tx . confirm ( hash ) ; expect ( confirmed . isSigned ( ) ) . toEqual ( false ) ; expect ( confirmed . isPending ( ) ) . toEqual ( false ) ; expect ( confirmed . isRejected ( ) ) . toEqual ( false ) ; expect ( confirmed . isInitialized ( ) ) . toEqual ( false ) ; expect ( confirmed . isConfirmed ( ) ) . toEqual ( true ) ; expect ( confirmed . isCxPending ( ) ) . toEqual ( false ) ; expect ( confirmed . isCxRejected ( ) ) . toEqual ( false ) ; expect ( confirmed . isCxConfirmed ( ) ) . toEqual ( true ) ; confirmed . setCxStatus ( confirmed . cxStatus ) ; confirmed . setTxStatus ( confirmed . txStatus ) ; expect ( confirmed . getTxStatus ( ) ) . toEqual ( TxStatus . CONFIRMED ) ; expect ( confirmed . getCxStatus ( ) ) . toEqual ( TxStatus . CONFIRMED ) ; } ) ; } ) ;