Как пользователи должны взаимодействовать со смарт-контрактом?

При развертывании смарт-контракта как я могу позволить пользователям моей собственной платформы (мобильной или веб-платформы) взаимодействовать с ним? Допустим, у меня есть следующий контракт:

contract Test {
    event Log(address addr);

    function logMe () public {
        Log(msg.sender);
    }
}

Чтобы использовать его, я должен иметь доступ к закрытому и открытому ключам пользователя. Можно ли разрешить пользователям взаимодействовать с блокчейном через свои собственные учетные записи без необходимости иметь учетные данные?


person Dan Zilberman    schedule 22.12.2017    source источник


Ответы (2)


Прежде всего, если вы пытались развернуть свой контракт на блокчейне с помощью Remix. И вы использовали созданный API для вашего созданного контракта. Фактически вы взаимодействуете со своим контрактом через Интернет. Вы можете просмотреть это видео, чтобы увидеть, как развертывать и использовать функции вызова внутри вашего контракта. Я рекомендую вам посмотреть это видео и сделать его руководство здесь.

Если вы хотите вызывать функции (общедоступные). Есть три шага, чтобы вы могли использовать свои контракты.

ШАГ первый: Разверните свой контракт в Blockchain и найдите свой ABI и адрес контракта. Например, если вы использовали remix для развертывания контракта, вы увидите эту информацию, щелкнув детали на вкладке компиляции.

введите описание изображения здесь

ШАГ ВТОРОЙ: используйте web3 и вставьте его в свой веб-браузер (установите Metamask тогда у вас уже есть web3, введенный в браузер)

ШАГ 3: Создайте API контракта, например экземпляр, установив поставщика web3, ABI и адрес контракта, которые вы получили на шаге 1.

ШАГ четвертый: Назовите свои контрактные функции.

Вот как вы убедитесь, что web3 уже внедрен и вы подключены к правильной цепочке блоков (TestNet / MainNet)

var Web3 = require('web3');

if (typeof web3 !== 'undefined') {
     // Use Mist/MetaMask's provider
     console.log('Web3 exist!')
     console.log(web3)
     web3 = new Web3(web3.currentProvider);

     web3.version.getNetwork((err, netId) => {
      switch (netId) {
        case "1":
          console.log('This is mainnet')
          break
        case "2":
          console.log('This is the deprecated Morden test network.')
          break
        case "3":
          console.log('This is the ropsten test network.')
          break
        default:
          console.log('This is an unknown network.')
      }
    })

 } else {
     console.log('No web3? You should consider trying MetaMask!')
     // fallback - use your fallback strategy (local node / hosted node + in-dapp id mgmt / fail)
     web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
 }

Вот как вы можете взаимодействовать с развернутым контрактом.

 var fooContract = web3.eth.contract( YOUR_ABI, (err, ctr) => { return ctr} );
     web3.eth.defaultAccount = web3.eth.accounts[0];
     $scope.accounts = web3.eth.accounts;

     console.log(web3.eth.defaultAccount);
    var CONTRACT = fooContract.at('YOUR_Deployed_contract_ADDRESS',(err, ctr)=>{
      return ctr;
    } ) 

Теперь вы можете легко использовать переменную CONTRACT для вызова ее общедоступных функций.

Звонки выглядят так:

CONTRACT.contractFunction(params)

PS: Пожалуйста, свяжитесь со мной, если у вас возникнут вопросы или проблемы (сложно объяснить все в одном посте)!

person Farzad Salimi Jazi    schedule 22.12.2017
comment
Спасибо! Отличное объяснение. До сих пор я не знал MetaMask. - person Dan Zilberman; 23.12.2017

да. Обычно это работает так: у вас есть размещенное веб-приложение, которое, как говорится, использует javascript (посмотрите на web3: https://github.com/ethereum/web3.js/) для взаимодействия с вашим смарт-контрактом. Пользователь переходит в ваше веб-приложение, а затем его учетная запись подключается, чтобы он мог отправлять запросы к вашему контракту (чтобы понять, как они подключают свою учетную запись, посмотрите в метамаску: https://metamask.io/ или запуск узла Ethereum, например, geth / parity). Вот хороший учебник, который объясняет рабочий процесс, в общих чертах описанный с использованием структуры разработки контрактов под названием Truffle: http://truffleframework.com/tutorials/pet-shop.

РЕДАКТИРОВАТЬ: Итак, отвечая на ваш вопрос об учетных данных, нет, вам не обязательно иметь их учетные данные.

person Flinn Dolman    schedule 22.12.2017
comment
Спасибо за помощь! - person Dan Zilberman; 23.12.2017