Я пытаюсь сгенерировать хэш файла и отправить его на контракт. Но я получаю сообщение об ошибке
Ошибка: новый BigNumber() не число: a8fac6cf98e6f5e9a76ae1f8064e505b(…)
Вот мой код контракта:
function sendHash(address student_id, string hash_value) returns(bool sufficient)
{
student_hashes[student_id] = hash_value;
return true;
}
Вот мой код javascript
function sendHash() {
getAddresses();
var meta = MetaCoin.deployed();
var address = document.getElementById("studentId").value;
var hash = (document.getElementById("hash").value);
setStatus("Initiating transaction... (please wait)");
meta.sendHash(account, hash).then(function() {
setStatus("Transaction complete!");
}).catch(function(e) {
console.log(e);
setStatus("Error sending contract; see log.");
});
Я использую тип данных «строка» в контракте, но ошибка говорит, что это не число. Пробовали разные способы, но не смогли это исправить. Любая помощь будет высоко оценен!
Я заставил это работать. Я не воспроизвел вашу проблему «Ошибка: новый BigNumber() не число:». Итак, во-первых, я бы рекомендовал повторно развернуть с помощью
truffle migrate --reset
Тогда, пожалуйста, ниже рабочий код:
Договор
pragma solidity ^0.4.4;
contract MetaCoin{
mapping (address => string) student_hashes;
function sendHash(address student_id, string hash_value) returns(bool sufficient) {
student_hashes[student_id] = hash_value;
return true;
}
function getHash(address student_id) constant returns(string hash) {
return student_hashes[student_id];
}
}
HTML
<!DOCTYPE html>
<html>
<head>
<link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'>
<link href="./app.css" rel='stylesheet' type='text/css'>
<script src="./app.js"></script>
</head>
<body>
<h1>Issue</h1>
<br><label for="address">Address:</label><input type="text" id="studentId"></input>
<h3>Last hash: <span class="black"><span id="lastHash"></span></span></h3>
<button id="send" onclick="getHash()">get hash</button>
<br>
<h1>Send</h1>
<br><label for="hash">Hash:</label><input type="text" id="hash"></input>
<br><br><button id="send" onclick="sendHash()">Send hash</button>
<br><br>
<span id="status"></span>
</body>
</html>
Javascript
var accounts;
var account;
function setStatus(message) {
var status = document.getElementById("status");
status.innerHTML = message;
};
function getHash() {
var c = MetaCoin.deployed();
var address = document.getElementById("studentId").value;
c.getHash.call(address).then(function(value) {
var h_element = document.getElementById("lastHash");
h_element.innerHTML = value.valueOf();
}).catch(function(e) {
console.log(e);
setStatus("Error getting Hash; see log.");
});
};
function sendHash() {
var c = MetaCoin.deployed();
var address = document.getElementById("studentId").value;
var hash = (document.getElementById("hash").value);
setStatus("Initiating transaction... (please wait)");
c.sendHash(address, hash).then(function() {
setStatus("Transaction complete!");
getHash()
}).catch(function(e) {
console.log(e);
setStatus("Error sending hash; see log.");
});
};
window.onload = function() {
web3.eth.getAccounts(function(err, accs) {
if (err != null) {
alert("There was an error fetching your accounts.");
return;
}
if (accs.length == 0) {
alert("Couldn't get any accounts! Make sure your Ethereum client is configured correctly.");
return;
}
accounts = accs;
account = accounts[0];
});
}
Только одно замечание: - Когда вы отправляете транзакцию, не забудьте добавить хотя бы {account: %sender address%}
Грег Джинмарт
student_hashes
? Вы используетеmapping(address => string)
илиmapping(address => uint)
?НовичокКодер
mapping (address => string) student_hashes;
Эдмунд Эдгар