@@ -692,6 +692,11 @@ describe("Sign Client Integration", () => {
692
692
events : [ ] ,
693
693
chains : [ "polkadot:mainnet" ] ,
694
694
} ,
695
+ cosmos : {
696
+ methods : [ "cosmos_signDirect" ] ,
697
+ events : [ ] ,
698
+ chains : [ "cosmos:mainnet" ] ,
699
+ } ,
695
700
} ,
696
701
namespaces : {
697
702
solana : {
@@ -767,6 +772,12 @@ describe("Sign Client Integration", () => {
767
772
chains : [ "polkadot:mainnet" ] ,
768
773
accounts : [ "polkadot:mainnet:0x" ] ,
769
774
} ,
775
+ cosmos : {
776
+ methods : [ "cosmos_signDirect" ] ,
777
+ events : [ ] ,
778
+ chains : [ "cosmos:mainnet" ] ,
779
+ accounts : [ "cosmos:mainnet:0x" ] ,
780
+ } ,
770
781
} ,
771
782
} ,
772
783
) ;
@@ -2311,6 +2322,102 @@ describe("Sign Client Integration", () => {
2311
2322
} ) ,
2312
2323
] ) ;
2313
2324
2325
+ // cosmos cosmos_signDirect example
2326
+ await Promise . all ( [
2327
+ new Promise < void > ( ( resolve ) => {
2328
+ clients . B . once ( "session_request" , async ( args ) => {
2329
+ const pendingRequests = clients . B . pendingRequest . getAll ( ) ;
2330
+ const { id, topic, params } = pendingRequests [ 0 ] ;
2331
+ expect ( params ) . toEqual ( args . params ) ;
2332
+ expect ( topic ) . toEqual ( args . topic ) ;
2333
+ expect ( id ) . toEqual ( args . id ) ;
2334
+ const expectedTxHashes = [
2335
+ "A7284BA475C55983E5BCB7D52F5C82CBFF19FD75725F5E0E33BA4384FCFC6052" ,
2336
+ ] ;
2337
+ const signedResult = {
2338
+ signature : {
2339
+ pub_key : {
2340
+ type : "tendermint/PubKeySecp256k1" ,
2341
+ value : "AgSEjOuOr991QlHCORRmdE5ahVKeyBrmtgoYepCpQGOW" ,
2342
+ } ,
2343
+ signature :
2344
+ "S7BJEbiXQ6vxvF9o4Wj7qAcocMQqBsqz+NVH4wilhidFsRpyqpSP5XiXoQZxTDrT9uET/S5SH6+5gUmjYntH/Q==" ,
2345
+ } ,
2346
+ signed : {
2347
+ chainId : "cosmoshub-4" ,
2348
+ accountNumber : "1" ,
2349
+ authInfoBytes :
2350
+ "ClAKRgofL2Nvc21vcy5jcnlwdG8uc2VjcDI1NmsxLlB1YktleRIjCiEDNOXj4u60JFq00+VbLBCNBTYy76Pn864AvYNFG/9cQwMSBAoCCH8YAhITCg0KBXVhdG9tEgQ0NTM1EIaJCw==" ,
2351
+ bodyBytes :
2352
+ "CpoICikvaWJjLmFwcGxpY2F0aW9ucy50cmFuc2Zlci52MS5Nc2dUcmFuc2ZlchLsBwoIdHJhbnNmZXISC2NoYW5uZWwtMTQxGg8KBXVhdG9tEgYxODg4MDYiLWNvc21vczFhanBkZndsZmRqY240MG5yZXN5ZHJxazRhOGo2ZG0wemY0MGszcSo/b3NtbzEwYTNrNGh2azM3Y2M0aG54Y3R3NHA5NWZoc2NkMno2aDJybXgwYXVrYzZybTh1OXFxeDlzbWZzaDd1MgcIARDFt5YRQsgGeyJ3YXNtIjp7ImNvbnRyYWN0Ijoib3NtbzEwYTNrNGh2azM3Y2M0aG54Y3R3NHA5NWZoc2NkMno2aDJybXgwYXVrYzZybTh1OXFxeDlzbWZzaDd1IiwibXNnIjp7InN3YXBfYW5kX2FjdGlvbiI6eyJ1c2VyX3N3YXAiOnsic3dhcF9leGFjdF9hc3NldF9pbiI6eyJzd2FwX3ZlbnVlX25hbWUiOiJvc21vc2lzLXBvb2xtYW5hZ2VyIiwib3BlcmF0aW9ucyI6W3sicG9vbCI6IjE0MDAiLCJkZW5vbV9pbiI6ImliYy8yNzM5NEZCMDkyRDJFQ0NENTYxMjNDNzRGMzZFNEMxRjkyNjAwMUNFQURBOUNBOTdFQTYyMkIyNUY0MUU1RUIyIiwiZGVub21fb3V0IjoidW9zbW8ifSx7InBvb2wiOiIxMzQ3IiwiZGVub21faW4iOiJ1b3NtbyIsImRlbm9tX291dCI6ImliYy9ENzlFN0Q4M0FCMzk5QkZGRjkzNDMzRTU0RkFBNDgwQzE5MTI0OEZDNTU2OTI0QTJBODM1MUFFMjYzOEIzODc3In1dfX0sIm1pbl9hc3NldCI6eyJuYXRpdmUiOnsiZGVub20iOiJpYmMvRDc5RTdEODNBQjM5OUJGRkY5MzQzM0U1NEZBQTQ4MEMxOTEyNDhGQzU1NjkyNEEyQTgzNTFBRTI2MzhCMzg3NyIsImFtb3VudCI6IjMzOTQ2NyJ9fSwidGltZW91dF90aW1lc3RhbXAiOjE3NDc3NDY3MzM3OTU4OTgzNjQsInBvc3Rfc3dhcF9hY3Rpb24iOnsiaWJjX3RyYW5zZmVyIjp7ImliY19pbmZvIjp7InNvdXJjZV9jaGFubmVsIjoiY2hhbm5lbC02OTk0IiwicmVjZWl2ZXIiOiJjZWxlc3RpYTFhanBkZndsZmRqY240MG5yZXN5ZHJxazRhOGo2ZG0wemNsN3h0ZCIsIm1lbW8iOiIiLCJyZWNvdmVyX2FkZHJlc3MiOiJvc21vMWFqcGRmd2xmZGpjbjQwbnJlc3lkcnFrNGE4ajZkbTB6cHd1eDhqIn19fSwiYWZmaWxpYXRlcyI6W119fX19" ,
2353
+ } ,
2354
+ } ;
2355
+
2356
+ const result = formatJsonRpcResult ( id , signedResult ) ;
2357
+
2358
+ let checkedWalletPublish = false ;
2359
+ clients . B . core . relayer . once ( RELAYER_EVENTS . publish , ( publishPayload : any ) => {
2360
+ const tvf = publishPayload . tvf ;
2361
+ if ( ! tvf ) {
2362
+ return console . error ( "cosmos tvf is undefined" ) ;
2363
+ }
2364
+ if ( ! tvf . chainId || ! tvf . rpcMethods || ! tvf . txHashes ) {
2365
+ return console . error ( "cosmos tvf is missing required fields" ) ;
2366
+ }
2367
+ if ( tvf . rpcMethods . length !== 1 && tvf . rpcMethods [ 0 ] !== "cosmos_signDirect" ) {
2368
+ return console . error ( "cosmos tvf rpcMethods is invalid" , tvf . rpcMethods ) ;
2369
+ }
2370
+ if ( tvf . txHashes . join ( "," ) !== expectedTxHashes . join ( "," ) ) {
2371
+ return console . error (
2372
+ "cosmos txHashes do not match: transactionId" ,
2373
+ tvf . txHashes ,
2374
+ expectedTxHashes ,
2375
+ ) ;
2376
+ }
2377
+
2378
+ checkedWalletPublish = true ;
2379
+ } ) ;
2380
+
2381
+ await clients . B . respond ( {
2382
+ topic,
2383
+ response : result ,
2384
+ } ) ;
2385
+
2386
+ expect ( checkedWalletPublish ) . to . be . true ;
2387
+ resolve ( ) ;
2388
+ } ) ;
2389
+ } ) ,
2390
+ new Promise < void > ( async ( resolve ) => {
2391
+ const requestParams = {
2392
+ method : "cosmos_signDirect" ,
2393
+ params : { } ,
2394
+ } ;
2395
+ let checkedDappPublish = false ;
2396
+
2397
+ clients . A . core . relayer . once ( RELAYER_EVENTS . publish , ( publishPayload : any ) => {
2398
+ checkedDappPublish = true ;
2399
+ const tvf = publishPayload . tvf ;
2400
+ expect ( tvf ) . to . exist ;
2401
+ expect ( tvf ?. chainId ) . to . eq ( TEST_REQUEST_PARAMS . chainId ) ;
2402
+ expect ( tvf ?. rpcMethods ) . to . eql ( [ requestParams . method ] ) ;
2403
+ expect ( tvf ?. txHashes ) . to . be . undefined ;
2404
+ expect ( tvf ?. contractAddresses ) . to . eql ( [ requestParams . params [ 0 ] . to ] ) ;
2405
+ } ) ;
2406
+
2407
+ await clients . A . request ( {
2408
+ topic,
2409
+ ...TEST_REQUEST_PARAMS ,
2410
+ request : {
2411
+ ...TEST_REQUEST_PARAMS . request ,
2412
+ ...requestParams ,
2413
+ } ,
2414
+ chainId : "cosmos:mainnet" ,
2415
+ } ) ;
2416
+ expect ( checkedDappPublish ) . to . be . true ;
2417
+ resolve ( ) ;
2418
+ } ) ,
2419
+ ] ) ;
2420
+
2314
2421
await throttle ( 1_000 ) ;
2315
2422
await deleteClients ( clients ) ;
2316
2423
} ) ;
0 commit comments