Nano Hash - криптовалюты, майнинг, программирование

Проблема с Solidity при передаче параметров функции

У меня есть смарт-контракт с функцией:

contract Example {
     event claimed(address owner);
     function claimStar() public {
          owner = msg.sender;
          emit claimed(msg.sender);
     }
}

Я использую Truffle V5.0 и коробку Webpack в качестве стандартного кода.

В моем truffle-config.js файле у меня есть конфигурация сети:

development:{
  host:"127.0.0.1",
  port: 9545,
  network_id:"*"
}

Все компилируется нормально, используя: - truffle develop - compile - migrate --reset Он говорит Truffle Develop started at http://127.0.0.1:9545

В моем файле index.js есть следующий код:

import Web3 from "web3";
import starNotaryArtifact from "../../build/contracts/StarNotary.json";

const App = {
  web3: null,
  account: null,
  meta: null,

  start: async function() {
    const { web3 } = this;

    try {
      // get contract instance
      const networkId = await web3.eth.net.getId();
      const deployedNetwork = starNotaryArtifact.networks[networkId];
      this.meta = new web3.eth.Contract(
        starNotaryArtifact.abi,
        deployedNetwork.address,
      );

      // get accounts
      const accounts = await web3.eth.getAccounts();
      this.account = accounts[0];
    } catch (error) {
      console.error("Could not connect to contract or chain.");
    }
  },

  setStatus: function(message) {
    const status = document.getElementById("status");
    status.innerHTML = message;
  },

  claimStarFunc: async function(){
    const { claimStar } = this.meta.methods;
    await claimStar();
    App.setStatus("New Star Owner is " + this.account + ".");
  }

};

window.App = App;

window.addEventListener("load", async function() {
  if (window.ethereum) {
    // use MetaMask's provider
    App.web3 = new Web3(window.ethereum);
    await window.ethereum.enable(); // get permission to access accounts
  } else {
    console.warn("No web3 detected. Falling back to http://127.0.0.1:9545. You should remove this fallback when you deploy live",);
    // fallback - use your fallback strategy (local node / hosted node + in-dapp id mgmt / fail)
    App.web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:9545"),);
  }

  App.start();
});

В моем браузере установлен Metamask, я добавил частную сеть с тем же URL-адресом, а также импортировал две учетные записи. Когда я запускаю приложение и открываю его в браузере, оно открывает Metamask для запроса разрешения, потому что я использую window.ethereum.enable();. Но когда я нажимаю кнопку claim, ничего не происходит. Обычно Metamask открывает запрос на подтверждение, но этого никогда не происходит. Я также создал новое свойство в контракте для тестирования, и оно отлично работает, показывая мне значение, назначенное в конструкторе контракта. Мой вопрос: я что-то упускаю?

Я также попытался изменить functionawait claimStar(); на await claimStar({from: this.account});, но в этом случае я получил сообщение об ошибке, что claimStar не ожидает параметров.

Буду признателен за любую помощь. Спасибо


Ответы:


1

Решил проблему, проблема была в функции claimStarFunc Должно быть так:

claimStarFunc: async function(){
    const { claimStar } = this.meta.methods;
    await claimStar().send({from:this.account});
    App.setStatus("New Star Owner is " + this.account + ".");
  }

Потому что отправляю транзакцию. Спасибо

22.01.2019
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..