Обновленные контракты не возвращаются в web3. js - PullRequest
0 голосов
/ 02 февраля 2020

Я перенес свои контракты 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})

  }
...