// Define revert event
errorStorageRoutedToL1(addresscontractL1);// Generic function in a contract
functionsetValue(bytes32node,bytes32key,bytes32value)external{// Get metadata from on-chain sources
(addresscontractL1,// Routed contract address on L1; may be globally constant
)=getMetadata(node);// Arbitrary code
// contractL1 = 0x32f94e75cde5fa48b6469323742e6004d701409b
// Route storage call to L1 router
revertStorageRoutedToL1(contractL1);};
// Function in routed L1 contract
functionsetValue(bytes32node,bytes32key,bytes32value)external{// Some code storing data mapped by node & msg.sender
...}
// Define revert event
errorStorageRoutedToL2(addresscontractL2,uint256chainId);// Generic function in a contract
functionsetValue(bytes32node,bytes32key,bytes32value)external{// Get metadata from on-chain sources
(addresscontractL2,// Contract address on L2; may be globally constant
uint256chainId// L2 ChainID; may be globally constant
)=getMetadata(node);// Arbitrary code
// contractL2 = 0x32f94e75cde5fa48b6469323742e6004d701409b
// chainId = 21
// Route storage call to L2 router
revertStorageRoutedToL2(contractL2,chainId);};
errorStorageRoutedToDatabase(stringgatewayUrl);// Generic function in a contract
functionsetValue(bytes32node,bytes32key,bytes32value)external{(stringgatewayUrl// Gateway URL; may be globally constant
)=getMetadata(node);// gatewayUrl = "https://api.namesys.xyz"
// Route storage call to database router
revertStorageRoutedToDatabase(gatewayUrl);};
/* POST request format*//* POST 请求格式 */typePost={node:stringnode:stringpreimage:stringpreimage:stringchainId:numberchainId:numberapproval:stringapproval:stringpayload:{payload:{field1:{field1:{value:stringvalue:stringsignature:stringsignature:stringtimestamp:numbertimestamp:numberdata:stringdata:string}field2:[field2:[{{index:numberindex:numbervalue:stringvalue:stringsignature:stringsignature:stringtimestamp:numbertimestamp:numberdata:stringdata:string}]field3:[field3:[{{key:numberkey:numbervalue:stringvalue:stringsignature:stringsignature:stringtimestamp:numbertimestamp:numberdata:stringdata:string}]}}
下面显示了一个完整的 Post 类型对象示例,用于更新节点的多个 ENS 记录。
```ts
/* Example of a POST request /
/ POST 请求示例 */
let post: Post = {
node: “0xe8e5c24bb5f0db1f3cab7d3a7af2ecc14a7a4e3658dfb61c9b65a099b5f086fb”,
preimage: “dev.namesys.eth”,
chainId: 1,
approval: “0xa94da8233afb27d087f6fbc667cc247ef2ed31b5a1ff877ac823b5a2e69caa49069f0daa45a464d8db2f8e4e435250cb446d8f279d45a2b865ebf2fff291f69f1c”,
payload: {
contenthash: {
value: “ipfs://QmYSFDzEcmk25JPFrHBHSMMLcTKLm6SvuZvKpijTHBnAYX”,
signature: “0x24730d1d85d556245b7766aef413188e22f219c8de263ccbfafee4413f0937c32e4f44068d84c7424f923b878dcf22184f8df86506de1cea3dad932c5bd5e9de1c”,
timestamp: 1708322868,
data: “0x2b45eb2b000000000000000000000000fe889053f7a0d2571f1898d2835c3cbdf50d766b000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000004124730d1d85d556245b7766aef413188e22f219c8de263ccbfafee4413f0937c32e4f44068d84c7424f923b878dcf22184f8df86506de1cea3dad932c5bd5e9de1c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a94da8233afb27d087f6fbc667cc247ef2ed31b5a1ff877ac823b5a2e69caa49069f0daa45a464d8db2f8e4e435250cb446d8f279d45a2b865ebf2fff291f69f1c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000026e301017012209603ccbcef5c2acd57bdec6a63e8a0292f3ce6bb583b6826060bcdc3ea84ad900000000000000000000000000000000000000000000000000000”
},
address: [
{
coinType: 0,
value: “1FfmbHfnpaZjKFvyi1okTjJJusN455paPH”,
signature: “0x60ecd4979ae2c39399ffc7ad361066d46fc3d20f2b2902c52e01549a1f6912643c21d23d1ad817507413dc8b73b59548840cada57481eb55332c4327a5086a501b”,
timestamp: 1708322877,
data: “0x2b45eb2b000000000000000000000000fe889053f7a0d2571f1898d2835c3cbdf50d766b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000004160ecd4979ae2c39399ffc7ad361066d46fc3d20f2b2902c52e01549a1f6912643c21d23d1ad817507413dc8b73b59548840cada57481eb55332c4327a5086a501b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a94da8233afb27d087f6fbc667cc247ef2ed31b5a1ff877ac823b5a2e69caa49069f0daa45a464d8db2f8e4e435250cb446d8f279d45a2b865ebf2fff291f69f1c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000a0e6ca5444e4d8b7c80f70237f332320387f18c7”
},
{
coinType: 60,
value: “0x47C10B0491A138Ddae6cCfa26F17ADCfCA299753”,
signature: “0xaad74ddef8c031131b6b83b3bf46749701ed11aeb585b63b72246c8dab4fff4f79ef23aea5f62b227092719f72f7cfe04f3c97bfad0229c19413f5cb491e966c1b”,
timestamp: 1708322917,
data: “0x2b45eb2b000000000000000000000000fe889053f7a0d2571f1898d2835c3cbdf50d766b0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000041aad74ddef8c031131b6b83b3bf46749701ed11aeb585b63b72246c8dab4fff4f79ef23aea5f62b227092719f72f7cfe04f3c97bfad0229c19413f5cb491e966c1b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a94da8233afb27d087f6fbc667cc247ef2ed31b5a1ff877ac823b5a2e69caa49069f0daa45a464d8db2f8e4e435250cb446d8f279d45a2b865ebf2fff291f69f1c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Citation
Please cite this document as:
Avneet Singh (@sshmatrix), 0xc0de4c0ffee (@0xc0de4c0ffee), Nick Johnson (@arachnid), Makoto Inoue (@makoto), "ERC-7700: 跨链存储路由协议 [DRAFT]," Ethereum Improvement Proposals, no. 7700, April 2024. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7700.