Я пытаюсь подключить сервер NodeJs к контракту на надежность, который был перенесен в локальную цепочку блоков, а затем вызвать методы этого класса через javascript. Тем не менее, код возвращает ошибку, в которой говорится, что getGreeting()
не определено.
Я очень новый Solidity и JavaScript (фон в C и Java), поэтому я чувствую, что я упустить что-то действительно простое?
Мой вопрос: как заставить его работать, найти метод и вернуть «Hello, World!» к терминалу?
Моя среда разработки:
- Трюфель v5.1.10 (ядро: 5.1.10)
- Солидность - 0,4.25 (соль c - js)
- Узел v12.14.1
- Web3. js v1.2.1
Ниже приведен код, над которым я работаю:
// import our compiled JSON
const contractJSON = require("./build/contracts/Hello.json");
const contract = require("@truffle/contract");
const Web3 = require('web3');
// create instance of ganache-cli provider
const web3 = new Web3("http://localhost:9545");
var Hello = contract(contractJSON);
Hello.setProvider(web3);
// if contract is deployed return instance of it and store in app variable
let app = Hello.deployed().then((instance) =>{
return instance;
}).catch(function(error) {
return error;
});
// call a method on our contract via javascript
app.getGreeting().then(() => {
console.log(app);
});
Для контекста контракт Солидности выглядит следующим образом:
pragma solidity >=0.4.0 <0.7.0;
contract Hello {
string greeting;
constructor() public {
greeting = "Hello, World!";
}
function getGreeting() public view returns (string memory) {
return greeting;
}
function setGreeting(string memory _greeting) public {
greeting = _greeting;
}
}