Я перенес свои контракты Solidity (.sol файлы) в локальный экземпляр Ganache, работающий на localhost: порт , и объявил в нем следующую функцию:
function createPost(string memory _content,string memory _title, string memory _category) public {
// Require valid content
require(bytes(_content).length > 0);
// Increment the post count
postCount ++;
// Create the post
posts[postCount] = Post(postCount, _content, 0, _title, _category, msg.sender);
// Trigger event
emit PostCreated(postCount, _content, 0, _title, _category, msg.sender);
}
Используя Truffle, Я инициировал экземпляр моего Контракта
contract = await Article.deployed()
await Article.createPost("Value1","Value2","Value3")
. Это приводит к использованию газа, что подтверждает мои сомнения в том, развернут ли он или нет. Когда я вызываю функцию postCount (), которая возвращает значение, которое увеличивается в createPost () в консоли Truffle, оно возвращает значение, которое должно быть, однако это только в этом случае (предположим, я трижды создал createPost () в truffle console
, он возвращает значение 3 вместо предположения 77, которое является числом, показанным в Ganache GUI для текущего блока).
Это код, который загружает данные блокчейна в мое приложение.
const web3 = new Web3(new Web3.providers.HttpProvider("HTTP://127.0.0.1:7545"));
var article_abi = require('../abis/Article.json');
var ArticleAddress = article_abi.networks;
var ArticleAddress = ArticleAddress["5777"]["address"]
console.log(JSON.stringify(ArticleAddress))
var ArticleContract = await new web3.eth.Contract(article_abi.abi, ArticleAddress);
//console.log(ArticleContract)
console.log(ArticleContract)
const accounts = await web3.eth.getAccounts()
//console.log(accounts[0])
this.setState({ account: accounts[0] })
this.setState({ ArticleContract })
const postCount = await ArticleContract.methods.postCount().call()
this.setState({ postCount })
// Load Posts
console.log(postCount)
for (var i = 1; i <= postCount; i++) {
const post = await ArticleContract.methods.posts(i).call()
this.setState({
posts: [...this.state.posts, post]
})
}
// Sort posts. Show highest tipped posts first
this.setState({
posts: this.state.posts.sort((a,b) => b.tipAmount - a.tipAmount )
})
this.setState({ loading: false})
}