В настоящее время я создаю dapp, который использует обе эти функции:
function order(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce) {
bytes32 hash = sha256(this, tokenGet, amountGet, tokenGive, amountGive, expires, nonce);
orders[msg.sender][hash] = true;
Order(tokenGet, amountGet, tokenGive, amountGive, expires, nonce, msg.sender);
}
function trade(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, address user, uint8 v, bytes32 r, bytes32 s, uint amount) {
//amount is in amountGet terms
bytes32 hash = sha256(this, tokenGet, amountGet, tokenGive, amountGive, expires, nonce);
if (!(
(orders[user][hash] || ecrecover(sha3("\x19Ethereum Signed Message:\n32", hash),v,r,s) == user) &&
block.number <= expires &&
safeAdd(orderFills[user][hash], amount) <= amountGet
)) throw;
tradeBalances(tokenGet, amountGet, tokenGive, amountGive, user, amount);
orderFills[user][hash] = safeAdd(orderFills[user][hash], amount);
Trade(tokenGet, amount, tokenGive, amountGive * amount / amountGet, user, msg.sender);
}
Я могу перечислить несколько аргументов событий в порядке, но я не могу сгенерировать данные, скажем, для проверки существования порядка.
Это правильно, что генерировать хэш? Я полагаю, это ( bytes32 hash = sha256(this)
) адрес отправителя?
var orderhash = web3.sha3(user, tokenGet, amountGet, tokenGive, amountGive, expires, nonce);
РЕДАКТИРОВАТЬ: я понял, что web3.sha3 не действует как sha3 от Solidity. Тем не менее, я не могу заставить его работать правильно, и я не могу установить модуль узла.
Эквивалент web3.sha3
солидности keccak256
. Функция солидности sha256
— это совсем другой хеш, и у него нет эквивалента в web3.