首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >0xAPI:无效签名

0xAPI:无效签名
EN

Ethereum用户
提问于 2022-06-20 13:20:14
回答 2查看 249关注 0票数 0

我找到了如何按照EIP712的要求签署一份进入Metamask的批准书:

代码语言:javascript
复制
const domain = [
   { name: "name", type: "string" },
   { name: "version", type: "string" },
   { name: "chainId", type: "uint256" },
   { name: "verifyingContract", type: "address" },
   { name: "salt", type: "bytes32" },
];
const bid = [

   { name: "makerToken", type: "address" },
   { name: "takerToken", type: "address" },
   { name: "makerAmount", type: "uint256" },
   { name: "takerAmount", type: "uint256" },
   { name: "takerTokenFeeAmount", type: "uint256" },
   { name: "maker", type: "address" },
   {name: "taker", type: "address" },
   {name: "sender", type: "address" },
   {name: "feeRecipient", type: "address" },
   {name: "pool", type: "bytes32" },
   { name: "expiry", type: "uint64" },
   { name: "salt", type: "uint256" },
   {name: "verifyingContract", type: "address" },
   { name: "chainId", type: "uint256" },

];


const domainData = {
   name: "myDomain",
   version: "1",
   chainId: 56,
   verifyingContract: "0xdef1c0ded9bec7f1a1670819833240f027b25eff",
   salt: '0x1656319140'
};
var message = {
makerToken: '0x55d398326f99059ff775485246999027b3197955',
takerToken: '0xe9e7cea3dedca5984780bafc599bd69add087d56',
makerAmount: '1000000000000000000',
takerAmount: '990000000000000000',
takerTokenFeeAmount: '990000000000000',
maker: '0x1111111111111111111111111111111111111111',  //my address
taker: '0x0000000000000000000000000000000000000000',
sender: '0x0000000000000000000000000000000000000000',
feeRecipient: '0x1111111111111111111111111111111111111111',
pool: '0x0000000000000000000000000000000000000000000000000000000000000037',
expiry: '1656319140',
salt: '0x1656319140',
verifyingContract: '0xdef1c0ded9bec7f1a1670819833240f027b25eff',
chainId: '56'
}



const data = JSON.stringify({
   types: {
       EIP712Domain: domain,
       Bid: bid
   },
   domain: domainData,
   primaryType: "Bid",
   message: message
});



await web3.currentProvider.sendAsync(
{
   method: "eth_signTypedData_v3",
   params: [fromAddress, data],
   from: fromAddress
},
function(err, result) {
   if (err) {
       return console.error(err);
   }
   

   
   const signature = result.result.substring(2);
   const r = "0x" + signature.substring(0, 64);
   const s = "0x" + signature.substring(64, 128);
   const v = parseInt(signature.substring(128, 130), 16);
   // The signature is now comprised of r, s, and v.

然后我包装了一个JSON,并为这个限制顺序请求0xAPI,并使用新创建的签名:

代码语言:javascript
复制
json = [
  {
    "makerToken": "0x55d398326f99059ff775485246999027b3197955",
    "takerToken": "0xe9e7cea3dedca5984780bafc599bd69add087d56",
    "makerAmount": "100000000000000000",
    "takerAmount": "99000000000000000",
    "maker": "0x1111111111111111111111111111111111111111",
    "taker": "0x0000000000000000000000000000000000000000",
    "chainId": 56,
    "verifyingContract": "0xdef1c0ded9bec7f1a1670819833240f027b25eff",
    "takerTokenFeeAmount": "99000000000000",
    "sender": "0x0000000000000000000000000000000000000000",
    "feeRecipient": "0x1111111111111111111111111111111111111111",
    "pool": "0x0000000000000000000000000000000000000000000000000000000000000037",
    "salt": "0x1656319140",
    "expiry": "1656319140",
    "signature": {
      "r": r,
      "s": s,
      "v": v,
      "signatureType": 2
    }
  }
];

axios.post('https://bsc.api.0x.org/orderbook/v1/orders', json);

签名的格式是有效的(r、s和v),但是0x API回答签名无效:

代码语言:javascript
复制
{"code":100,"reason":"Validation Failed","validationErrors":[{"code":1005,"field":"signedOrder[0]","reason":"InvalidSignature"}]}

我错过了什么?我是否应该更改审批消息,使其完全符合JSON请求?(但还有额外的字段,所以我不确定.)

预先多谢:-)

EN

回答 2

Ethereum用户

发布于 2022-07-05 10:29:13

你能解决你的问题吗?我在https://bsc.api.0x.org/orderbook/v1/orders上看到了一些订单

(这是我第一次在那里看到一些订单)

不确定是否有用,但是你检查过这里的文档了吗?https://docs.0x.org/market-makers/guides/generating-0x-order-hashes

票数 0
EN

Ethereum用户

发布于 2022-07-06 12:05:49

(我已切换至主ETH网络)

是的,这是答案的一部分,但我需要完整的签名架构(发送什么以及如何发送)。不幸的是,无法通过其他网站上的Metamask实现MITM的工作签名,从而逆转engeneer的协议/架构。

在这些网站上反向工程Node.JS生成的20 to文件实际上比浏览Docs要容易得多

(更不用说所有这些0xGitHub项目,应该在点击几下就可以设置一个DEX,但自2020年lol以来就过时了)

(我完全知道,我可以用node.js自己来完成,传输一个20 my的文件,但我希望我的网站在Apache上。)

遗憾的是,对于20 be的节点项目,可以使用200 be的完整JS项目来完成。

海事组织,这就像把事情弄得很复杂,同时又尽量保持简单。

无论如何,现在我已经开始工作了,多亏了我的逆向工程技巧,lol新的DEX即将到来;-)

但我会尽快更新那个讨厌的重码,使它更轻巧。

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/130511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档