@@ -29,6 +29,12 @@ pub struct TokenTransfer {
29
29
tag : TypeTag ,
30
30
}
31
31
32
+ pub struct FungibleAssetTransfer {
33
+ metadata_address : String ,
34
+ to : String ,
35
+ amount : u64 ,
36
+ }
37
+
32
38
pub struct RegisterToken {
33
39
coin_type : TypeTag ,
34
40
}
@@ -41,6 +47,7 @@ pub enum OpsDetails {
41
47
TokenTransfer ( TokenTransfer ) ,
42
48
ImplicitTokenTransfer ( TokenTransfer ) ,
43
49
NftOps ( NftOperation ) ,
50
+ FungibleAssetTransfer ( FungibleAssetTransfer ) ,
44
51
}
45
52
46
53
fn setup_proto_transaction < ' a > (
@@ -135,6 +142,20 @@ fn setup_proto_transaction<'a>(
135
142
panic ! ( "Unsupported arguments" )
136
143
}
137
144
} ,
145
+ "fungible_asset_transfer" => {
146
+ if let OpsDetails :: FungibleAssetTransfer ( fungible_asset_transfer) = ops_details. unwrap ( )
147
+ {
148
+ Proto :: mod_SigningInput:: OneOftransaction_payload :: fungible_asset_transfer (
149
+ Proto :: FungibleAssetTransferMessage {
150
+ to : fungible_asset_transfer. to . into ( ) ,
151
+ amount : fungible_asset_transfer. amount ,
152
+ metadata_address : fungible_asset_transfer. metadata_address . into ( ) ,
153
+ } ,
154
+ )
155
+ } else {
156
+ panic ! ( "Unsupported arguments" )
157
+ }
158
+ } ,
138
159
"blind_sign_json" => Proto :: mod_SigningInput:: OneOftransaction_payload :: None ,
139
160
_ => Proto :: mod_SigningInput:: OneOftransaction_payload :: None ,
140
161
} ;
@@ -321,6 +342,52 @@ fn test_aptos_sign_coin_transfer() {
321
342
}"# ) ;
322
343
}
323
344
345
+ // Successfully broadcasted https://explorer.aptoslabs.com/txn/0x475fc97bcba87907166a720676e1b2f5320e613fd13014df37dcf17b09ff0e98/balanceChange?network=mainnet
346
+ #[ test]
347
+ fn test_aptos_sign_fungible_asset_transfer ( ) {
348
+ let input = setup_proto_transaction (
349
+ "0x07968dab936c1bad187c60ce4082f307d030d780e91e694ae03aef16aba73f30" , // Sender's address
350
+ "5d996aa76b3212142792d9130796cd2e11e3c445a93118c08414df4f66bc60ec" , // Keypair
351
+ "fungible_asset_transfer" ,
352
+ 74 , // Sequence number
353
+ 1 ,
354
+ 20 ,
355
+ 1736060099 ,
356
+ 100 ,
357
+ "" ,
358
+ "" ,
359
+ Some ( OpsDetails :: FungibleAssetTransfer ( FungibleAssetTransfer {
360
+ metadata_address : "0x2ebb2ccac5e027a87fa0e2e5f656a3a4238d6a48d93ec9b610d570fc0aa0df12"
361
+ . to_string ( ) ,
362
+ to : "0x2d92d71078f11d923c2b703b95a288c0e2ae63c0d29154e6278bf8004f9b4e52" . to_string ( ) ,
363
+ amount : 100000000 ,
364
+ } ) ) ,
365
+ ) ;
366
+ let output = Signer :: sign_proto ( input) ;
367
+ test_tx_result ( output,
368
+ "07968dab936c1bad187c60ce4082f307d030d780e91e694ae03aef16aba73f304a00000000000000020000000000000000000000000000000000000000000000000000000000000001167072696d6172795f66756e6769626c655f73746f7265087472616e73666572010700000000000000000000000000000000000000000000000000000000000000010e66756e6769626c655f6173736574084d657461646174610003202ebb2ccac5e027a87fa0e2e5f656a3a4238d6a48d93ec9b610d570fc0aa0df12202d92d71078f11d923c2b703b95a288c0e2ae63c0d29154e6278bf8004f9b4e520800e1f5050000000014000000000000006400000000000000c32c7a670000000001" , // Expected raw transaction bytes
369
+ "2d4c5cbb710b6ef92813597054dbf8d3014529a7d85f6393f01e2a3e978c461c6aa656475b98b453ed3faebf7aa1fdd912bfc59a0c1b6fc44330793994b2e40c" , // Expected signature
370
+ "07968dab936c1bad187c60ce4082f307d030d780e91e694ae03aef16aba73f304a00000000000000020000000000000000000000000000000000000000000000000000000000000001167072696d6172795f66756e6769626c655f73746f7265087472616e73666572010700000000000000000000000000000000000000000000000000000000000000010e66756e6769626c655f6173736574084d657461646174610003202ebb2ccac5e027a87fa0e2e5f656a3a4238d6a48d93ec9b610d570fc0aa0df12202d92d71078f11d923c2b703b95a288c0e2ae63c0d29154e6278bf8004f9b4e520800e1f5050000000014000000000000006400000000000000c32c7a6700000000010020ea526ba1710343d953461ff68641f1b7df5f23b9042ffa2d2a798d3adb3f3d6c402d4c5cbb710b6ef92813597054dbf8d3014529a7d85f6393f01e2a3e978c461c6aa656475b98b453ed3faebf7aa1fdd912bfc59a0c1b6fc44330793994b2e40c" , // Expected encoded transaction
371
+ r#"{
372
+ "expiration_timestamp_secs": "1736060099",
373
+ "gas_unit_price": "100",
374
+ "max_gas_amount": "20",
375
+ "payload": {
376
+ "arguments": ["0x2ebb2ccac5e027a87fa0e2e5f656a3a4238d6a48d93ec9b610d570fc0aa0df12","0x2d92d71078f11d923c2b703b95a288c0e2ae63c0d29154e6278bf8004f9b4e52", "100000000"],
377
+ "function": "0x1::primary_fungible_store::transfer",
378
+ "type": "entry_function_payload",
379
+ "type_arguments": ["0x1::fungible_asset::Metadata"]
380
+ },
381
+ "sender": "0x7968dab936c1bad187c60ce4082f307d030d780e91e694ae03aef16aba73f30",
382
+ "sequence_number": "74",
383
+ "signature": {
384
+ "public_key": "0xea526ba1710343d953461ff68641f1b7df5f23b9042ffa2d2a798d3adb3f3d6c",
385
+ "signature": "0x2d4c5cbb710b6ef92813597054dbf8d3014529a7d85f6393f01e2a3e978c461c6aa656475b98b453ed3faebf7aa1fdd912bfc59a0c1b6fc44330793994b2e40c",
386
+ "type": "ed25519_signature"
387
+ }
388
+ }"# ) ;
389
+ }
390
+
324
391
// Successfully broadcasted https://explorer.aptoslabs.com/txn/0x197d40ea12e2bfc65a0a913b9f4ca3b0b0208fe0c1514d3d55cef3d5bcf25211?network=mainnet
325
392
#[ test]
326
393
fn test_implicit_aptos_sign_coin_transfer ( ) {
0 commit comments