我找到了如何按照EIP712的要求签署一份进入Metamask的批准书:
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,并使用新创建的签名:
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回答签名无效:
{"code":100,"reason":"Validation Failed","validationErrors":[{"code":1005,"field":"signedOrder[0]","reason":"InvalidSignature"}]}我错过了什么?我是否应该更改审批消息,使其完全符合JSON请求?(但还有额外的字段,所以我不确定.)
预先多谢:-)
发布于 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
发布于 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即将到来;-)
但我会尽快更新那个讨厌的重码,使它更轻巧。
https://ethereum.stackexchange.com/questions/130511
复制相似问题