Bitcoin Forum

Local => Кодеры => Topic started by: igda23gh on November 10, 2020, 04:11:54 PM



Title: Помогите!
Post by: igda23gh on November 10, 2020, 04:11:54 PM
Приветствую. Увлекся программированием. Познания у меня в этом вопросе слабые и разрозненные. Осилил написание простенького смарт-контракта ETH. Теперь хотелось бы попробовать сделать простенькую HTML страничку с помощью которой можно было бы взаимодействовать со смарт-контрактом.

По содержанию, нужны два поля. Одно вписывает инфу в блокчейн обращаясь к функции, а другое считывает, если указать в нем предмет(адрес или id). А под этими полями главная кнопка которая обращается к плагину метамаска и формирует транзакцию, с заданными условиями (вроде определенного разработчиком ценника). Так же, важно чтобы эта транзакция записывала в блокчейн инфу из первого поля, если таковая была указана.

Сколько не бился, в реализации так и не продвинулся. Знаю, что реализовать это нужно как то с web3js. Но примеров готового кода для такого решения нигде не нашел.

Буду благодарен тем кто откликнется и сможет написать в ветку такой код. А то я так и не пойму принцип его создания...

Заранее спасибо, тем кто откликнется.


Title: Re: Помогите!
Post by: ~DefaultTrust on November 11, 2020, 05:28:49 AM
Чистый браузер это песочница, из нее во взрослый мир блокчейнов не пускают.
Так что если очень хочется из песочницы браузера пообщаться со взрослыми с блокчейном, то нужен посредник - папа или мама плагин метамаск например. Этот посредник должен уметь принимать сообщения от детей скриптов из песочницы браузера чтобы потом переводить эти сообщения на язык взрослых блокчейнов.
Таким образом, ваша задача состоит сейчас в том, чтобы научиться говорить хотя бы на том уровне, чтобы вас понимали родные папа и мама прочитать документацию к АПИ функциям метамаска (https://docs.metamask.io/guide/getting-started.html#basic-considerations) которые обеспечивают интерфес между браузерными скриптами и блокчейном


Title: Re: Помогите!
Post by: bomj on November 11, 2020, 11:00:38 PM
В принципе я могу вам поспособствовать.
Но здесь уже нужно использовать js.
Я так же как и вы начинал с нуля и до сих пор не соображаю в js, так что до всего дохожу эмпирически.
Попробуйте на примере https://ads.0xbt.net самостоятельно разобраться, да потратите время, но иначе так и застрянете в ж....)))
Ну уж если не сообразите, то кидайте свой контракт и как будет время, сделаю вам вашу страничку/dapp)))


Title: Re: Помогите!
Post by: igda23gh on November 12, 2020, 11:02:35 AM
Чистый браузер это песочница, из нее во взрослый мир блокчейнов не пускают.
Так что если очень хочется из песочницы браузера пообщаться со взрослыми с блокчейном, то нужен посредник - папа или мама плагин метамаск например. Этот посредник должен уметь принимать сообщения от детей скриптов из песочницы браузера чтобы потом переводить эти сообщения на язык взрослых блокчейнов.
Таким образом, ваша задача состоит сейчас в том, чтобы научиться говорить хотя бы на том уровне, чтобы вас понимали родные папа и мама прочитать документацию к АПИ функциям метамаска (https://docs.metamask.io/guide/getting-started.html#basic-considerations) которые обеспечивают интерфес между браузерными скриптами и блокчейном

Спасибо за ответ. Я в курсе этой теоретической части. Вся загвоздка в том, что у меня не хватает знаний для реализации. В случае со смарт-контрактами, можно изучить Solidity на начальном уровне и просмотрев коды чужих контрактов разобраться как реализовать что-то своё. Но в моем случае, примеры готового кода посмотреть просто негде. Я не нашел ничего, что при нажатии на кнопку (допустим регистрации) обращалось бы к метамаску и позволяло через поля на сайте отправлять инфу в блокчейн.

В принципе я могу вам поспособствовать.
Но здесь уже нужно использовать js.
Я так же как и вы начинал с нуля и до сих пор не соображаю в js, так что до всего дохожу эмпирически.
Попробуйте на примере https://ads.0xbt.net самостоятельно разобраться, да потратите время, но иначе так и застрянете в ж....)))
Ну уж если не сообразите, то кидайте свой контракт и как будет время, сделаю вам вашу страничку/dapp)))

Solidity  во многом похож на Js. Я тоже знаю его довольно поверхностно, но в строках кода ориентироваться могу. Эмпирически я дошел до понимания solidity. Писал и читал, пока однажды меня просто не осенило, что перед глазами теперь вполне понятные команды, а не набор символов. Вообще жалею, что еще в детстве не начал изучать программирование).


Спасибо за ссылку. Я внимательно изучу всё. Но если у вас есть ссылки на какие-нибудь примеры реализации чего-то пообного, то буду рад, если вы поделитесь)


Title: Re: Помогите!
Post by: bomj on November 13, 2020, 06:17:34 PM
Попытаюсь пояснить на примере.
Откройте код страницы:
view-source:https://ads.0xbt.net/ads.html
Вы увидите там скрипт запроса к сети эфира:
Code:
<script>
    var web3 = new Web3(new Web3.providers.HttpProvider("https://node3.web3api.com"));
    // var web3 = new Web3(new Web3.providers.HttpProvider("https://mainnet.infura.io/v3/80f1c00345214da4bdbc4d02f35fb265"));
  
    var version = web3.version.api;
    console.log(version);
    var MyContract;
    var myContractInstance;
    try {
        MyContract = web3.eth.contract([{"constant":true,"inputs":[],"name":"getAds","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAds","type":"string"}],"name":"setAds","outputs":[],"payable":true,"stateMutability":"payable","type":"function"}]);
        myContractInstance = MyContract.at("0x30783ee8fdf264f59a1846b24dbfc73ab4aa7d18");
    }
..............т.д...........................
Это применительно к данному контракту, адаптируйте под свой.

Далее - кнопка запроса:
Code:
<button type='button' id='btn_5' class="knopka" onclick="ethcall2('getAds', 'input_5','myanswer_5','string', '|string', 'btn_5');"><b><span style="color:white;">Get <i class="fa fa-btc"></i> Ads</span></b></button>
адаптируйте

Теперь подключение к Метамаск и отправление транзакций(в примере сеть бинанс):
view-source:https://ads.0xbt.net/ads-bsc.html
view-source:https://ads.0xbt.net/dapp.html
Те же манипуляции........)))


Title: Re: Помогите!
Post by: igda23gh on November 14, 2020, 05:47:03 PM
Попытаюсь пояснить на примере.
Откройте код страницы:
view-source:https://ads.0xbt.net/ads.html
Вы увидите там скрипт запроса к сети эфира:
Code:
<script>
    var web3 = new Web3(new Web3.providers.HttpProvider("https://node3.web3api.com"));
    // var web3 = new Web3(new Web3.providers.HttpProvider("https://mainnet.infura.io/v3/80f1c00345214da4bdbc4d02f35fb265"));
  
    var version = web3.version.api;
    console.log(version);
    var MyContract;
    var myContractInstance;
    try {
        MyContract = web3.eth.contract([{"constant":true,"inputs":[],"name":"getAds","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAds","type":"string"}],"name":"setAds","outputs":[],"payable":true,"stateMutability":"payable","type":"function"}]);
        myContractInstance = MyContract.at("0x30783ee8fdf264f59a1846b24dbfc73ab4aa7d18");
    }
..............т.д...........................
Это применительно к данному контракту, адаптируйте под свой.

Далее - кнопка запроса:
Code:
<button type='button' id='btn_5' class="knopka" onclick="ethcall2('getAds', 'input_5','myanswer_5','string', '|string', 'btn_5');"><b><span style="color:white;">Get <i class="fa fa-btc"></i> Ads</span></b></button>
адаптируйте

Теперь подключение к Метамаск и отправление транзакций(в примере сеть бинанс):
view-source:https://ads.0xbt.net/ads-bsc.html
view-source:https://ads.0xbt.net/dapp.html
Те же манипуляции........)))


Я не могу понять как эту проблему обойти. Пишу через VCode Studio. Юзаю Node js.
В IDE проблемы нет, но со стороны клиента - такая ошибка.
Насколько я понял, метод require не используется браузерами. Но как мне тогда позднее использовать этот код на страничке сайта? И как проверять работоспособность сейчас.

https://d.radikal.ru/d41/2011/71/b7737d7a3e45.jpg


Title: Re: Помогите!
Post by: bomj on November 18, 2020, 05:25:10 PM
Если не получается, скиньте адрес контракта с кодом.


Title: Re: Помогите!
Post by: gettocat on November 22, 2020, 05:44:48 PM


Я не могу понять как эту проблему обойти. Пишу через VCode Studio. Юзаю Node js.
В IDE проблемы нет, но со стороны клиента - такая ошибка.
Насколько я понял, метод require не используется браузерами. Но как мне тогда позднее использовать этот код на страничке сайта? И как проверять работоспособность сейчас.

https://d.radikal.ru/d41/2011/71/b7737d7a3e45.jpg

В браузерах require не используется, там нужно явно подключать скрипты к странице. Require это для ноды. На примере выше там скрипт явно подключается

Code:
<script type="text/javascript" src="https://etherscan.io/jss/web3.min.js?v=0.20.6"></script>

Добавьте эту строку в хеадер и Web3 окажется существующим. А вообще лучше почитать документацию к Web3, там всё написано должно быть.