Skip to content

Conversation

@luca992
Copy link

@luca992 luca992 commented Nov 11, 2025

There's a bunch of issues with this. serde_json::Value doesn't preserving order when you remove from it (even if you add the preserve_order feature, and mp_serde::to_vec_named doesn't know what data type to use for the int when packing so it encodes information about serde in the msgpack. Also just manipulating the json value like that is just pretty jenky.

For example a serde Value with a number will look like this when packed:

0x83b07369676e6174757265436861696e4964a3307831aa7369676e6174757265739183a172d942307864623433373135643037383931613063363361383937376139393534646332346664326663363063373436643734353566363133326236396163396665393734a173d942307832386236323363376364643563383230643461663832326634323336623361663361613063373938653736396235353031613331323162343634623761353835a17681bc2473657264655f6a736f6e3a3a707269766174653a3a4e756d626572a23238a77061796c6f616483ac6d756c746953696755736572d92a307832623339633062636664343763356132376636333766383832303661666239356637616661323838ab6f757465725369676e6572d92a307862373131613133636261663734316138383263373230623433363861346566323661346631613632a6616374696f6e8aa474797065a973656e644173736574b07369676e6174757265436861696e4964a730783636656565b068797065726c6971756964436861696ea7546573746e6574ab64657374696e6174696f6ed92a307836643938383538373139363035643332366664633136343839363737333432343462323762386133a9736f75726365446578a0ae64657374696e6174696f6e446578a0a5746f6b656ea455534443a6616d6f756e74a4302e3031ae66726f6d5375624163636f756e74a0a56e6f6e636581bc2473657264655f6a736f6e3a3a707269766174653a3a4e756d626572ad31373632383338313437303030

{
	"signatureChainId": "0x1",
	"signatures": [
		{
			"r": "0xdb43715d07891a0c63a8977a9954dc24fd2fc60c746d7455f6132b69ac9fe974",
			"s": "0x28b623c7cdd5c820d4af822f4236b3af3aa0c798e769b5501a3121b464b7a585",
			"v": {
				"$serde_json::private::Number": "28"
			}
		}
	],
	"payload": {
		"multiSigUser": "0x2b39c0bcfd47c5a27f637f88206afb95f7afa288",
		"outerSigner": "0xb711a13cbaf741a882c720b4368a4ef26a4f1a62",
		"action": {
			"type": "sendAsset",
			"signatureChainId": "0x66eee",
			"hyperliquidChain": "Testnet",
			"destination": "0x6d98858719605d326fdc1648967734244b27b8a3",
			"sourceDex": "",
			"destinationDex": "",
			"token": "USDC",
			"amount": "0.01",
			"fromSubAccount": "",
			"nonce": {
				"$serde_json::private::Number": "1762838147000"
			}
		}
	}
}

I refactored a lot of stuff to do it properly with the Actions Enum and other types without having to resort to Value.

Send asset actually works now!

…not serialize

package outer_signer and payload_multi_sig_user in MultiSigExtension
This causes issues especially with message packing multi-sig transaction

when for example a serde Value with a number will look like this when packed:

`0x83b07369676e6174757265436861696e4964a3307831aa7369676e6174757265739183a172d942307864623433373135643037383931613063363361383937376139393534646332346664326663363063373436643734353566363133326236396163396665393734a173d942307832386236323363376364643563383230643461663832326634323336623361663361613063373938653736396235353031613331323162343634623761353835a17681bc2473657264655f6a736f6e3a3a707269766174653a3a4e756d626572a23238a77061796c6f616483ac6d756c746953696755736572d92a307832623339633062636664343763356132376636333766383832303661666239356637616661323838ab6f757465725369676e6572d92a307862373131613133636261663734316138383263373230623433363861346566323661346631613632a6616374696f6e8aa474797065a973656e644173736574b07369676e6174757265436861696e4964a730783636656565b068797065726c6971756964436861696ea7546573746e6574ab64657374696e6174696f6ed92a307836643938383538373139363035643332366664633136343839363737333432343462323762386133a9736f75726365446578a0ae64657374696e6174696f6e446578a0a5746f6b656ea455534443a6616d6f756e74a4302e3031ae66726f6d5375624163636f756e74a0a56e6f6e636581bc2473657264655f6a736f6e3a3a707269766174653a3a4e756d626572ad31373632383338313437303030`

```
{
	"signatureChainId": "0x1",
	"signatures": [
		{
			"r": "0xdb43715d07891a0c63a8977a9954dc24fd2fc60c746d7455f6132b69ac9fe974",
			"s": "0x28b623c7cdd5c820d4af822f4236b3af3aa0c798e769b5501a3121b464b7a585",
			"v": {
				"$serde_json::private::Number": "28"
			}
		}
	],
	"payload": {
		"multiSigUser": "0x2b39c0bcfd47c5a27f637f88206afb95f7afa288",
		"outerSigner": "0xb711a13cbaf741a882c720b4368a4ef26a4f1a62",
		"action": {
			"type": "sendAsset",
			"signatureChainId": "0x66eee",
			"hyperliquidChain": "Testnet",
			"destination": "0x6d98858719605d326fdc1648967734244b27b8a3",
			"sourceDex": "",
			"destinationDex": "",
			"token": "USDC",
			"amount": "0.01",
			"fromSubAccount": "",
			"nonce": {
				"$serde_json::private::Number": "1762838147000"
			}
		}
	}
}
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants