Я развернул надежный смарт-контракт вместе с графическим интерфейсом с помощью Javascript и HTML. Этот проект хорошо работает на моем компьютере.
Теперь я хочу вызвать функции смарт-контракта с телефона Android.
Есть ли возможность это сделать? И если да, то как сделать?
А также нужно ли мне писать смарт-контракт с Java
? или Solidity
версия подходит?
Код моего смарт-контракта солидности:
pragma solidity 0.4.23;
contract RFID {
struct StateStruct {
bytes32 description;
mapping(bytes32 => bytes32) sub_state;
}
struct ObjectStruct {
StateStruct state;
address owner;
bool isObject;
bytes32 review;
}
mapping(bytes32 => ObjectStruct) objectStructs;
bytes32[] public objectList;
event LogNewObject(address sender, bytes32 indexed id, bytes32 sub_states_types, bytes32 sub_states_values, address owner);
event LogChangeObjectState(address sender, bytes32 indexed id, bytes32 sub_states_types, bytes32 sub_states_values);
event LogChangeObjectOwner(address sender, bytes32 indexed id, address newOwner);
event LogNewObjectReview(address sender, bytes32 indexed _id, bytes32 _review, address _owner);
event LogChangeObjectStateReview(address sender, bytes32 indexed id, bytes32 _review);
function isObject(bytes32 _id) public view returns(bool isIndeed) {
return objectStructs[_id].isObject;
}
function getObjectCount() public view returns(uint count) {
return objectList.length;
}
/*function setArraySize(uint256 _number_of_sub_states) public {
number_of_sub_states = _number_of_sub_states;
}
function getArraySize() view public returns (uint256) {
return number_of_sub_states;
}*/
function newObject(bytes32 _id, uint256 number_of_sub_states, bytes32[10] sub_states_types, bytes32[10] sub_states_values, address _owner) public returns(bool success) {
require(!isObject(_id));
uint256 counter=0;
for(counter; counter < number_of_sub_states; counter++) {
objectStructs[_id].state.sub_state[sub_states_types[counter]] = sub_states_values[counter];
emit LogNewObject(msg.sender, _id, bytes32(sub_states_types[counter]), bytes32(sub_states_values[counter]), _owner);
}
objectStructs[_id].owner = _owner;
objectStructs[_id].isObject = true;
objectList.push(_id);
return true;
}
function newObjectReview(bytes32 _id, bytes32 _review, address _owner) public returns(bool success) {
require(!isObject(_id));
objectStructs[_id].owner = _owner;
objectStructs[_id].isObject = true;
objectStructs[_id].review = _review;
emit LogNewObjectReview(msg.sender, _id, _review, _owner);
objectList.push(_id);
return true;
}
function changeObjectState(bytes32 _id, uint256 number_of_sub_states, bytes32[10] sub_states_types, bytes32[10] sub_states_values) public returns(bool success) {
require(isObject(_id));
uint256 counter=0;
for(counter; counter < number_of_sub_states; counter++) {
objectStructs[_id].state.sub_state[sub_states_types[counter]] = sub_states_values[counter];
emit LogChangeObjectState(msg.sender, _id, bytes32(sub_states_types[counter]), bytes32(sub_states_values[counter]));
}
return true;
}
function changeObjectStateReview(bytes32 _id, bytes32 _review) public returns(bool success) {
require(isObject(_id));
objectStructs[_id].review = _review;
emit LogChangeObjectStateReview(msg.sender, _id, _review);
return true;
}
function changeObjectOwner(bytes32 _id, address _newOwner) public returns(bool success) {
require(isObject(_id));
objectStructs[_id].owner = _newOwner;
emit LogChangeObjectOwner(msg.sender, _id, _newOwner);
return true;
}
}
Что я хочу сделать, так это вызвать функции моего контракта на телефоне Android.
Примечание. Я зарегистрировался Infura
, однако, честно говоря, я не знаю, как использовать его на моем телефоне Android, чтобы вызывать функции этого смарт-контракта с моего телефона Android?
Если вы спрашиваете, как запускать DApps с мобильного устройства Android, вы можете загрузить приложение Toshi . По сути, это браузер со встроенным кошельком и узлом Ethereum, который будет запускать все ваши веб-страницы на основе web3.js.
Toshi
? Я добавил исходный код контракта к своему вопросу. Спасибо.
ip address : 18.221.104.179
Однако я не знаю, как найти свой контракт в Toshi? Еще раз спасибо.18.221.104.179
я получаю снимок экрана с ошибкой 502, в то время как я, честно говоря, не совсем понял, что делает Тоши? Я имею в виду, когда мы загружаем index.html
файл на сервер, невозможно взаимодействовать со смарт-контрактом ex. google chrome
браузер вместо Toshi
? СпасибоToshi
таким образом, что контракт еще не загружен на сервер с помощью localhost
? Спасибо.Toshi
? Спасибо1. Uploading GUI web application of RFID/NFC smart contract on server. 2. Finding this Dapp in Toshi browser : http://www.toshi.org/ on android phone. 3. Create new object by smart contract with some review. 4. Getting Tx hash and copy to NFC app. 5. Write Tx hash on NCF tag.
Вы должны изучить web3j по адресу https://web3j.io/ . У них есть библиотека Java, которая взаимодействует с блокчейном Ethereum, подобно библиотеке JavaScript web3.js. Он имеет версию для Android, а также ванильную версию для Java.
Geth можно запустить как на Android, так и на iOS. Ночные сборки ветки разработки всегда включают архивы Android .aar, которые можно связать с проектом Android Studio, и платформу iOS, которую можно использовать в XCode.
Поскольку Geth еще не имеет функциональности легкого клиента (который на самом деле требует обновления глобального P2P-протокола Ethereum), он довольно тяжелый, но это будет официальный способ запуска мобильных DApp, и, насколько мне известно, только у Geth есть даже отдаленное представление о легком клиенте. поддерживать.
Дополнительную информацию можно найти в этом вопросе.
Если вы пытаетесь подключиться к сети Ethereum из собственного мобильного приложения, ознакомьтесь с этим учебным пособием Geth для Android. Это их ссылка на Github .
Я также сталкивался с этой библиотекой, Ethereum Android , но пока не уверен в ее возможностях.
Третий вариант, который мне показался многообещающим, — это Web3j .
Несмотря на то, что все они выглядят очень многообещающе и над ними велась разработка в течение достаточно долгого времени, немного странно, что по ним недостаточно руководств и документации или даже реализаций в мобильных приложениях, которые подключаются к сети Ethereum.
Я также преследую ту же цель, поэтому не стесняйтесь обращаться ко мне дальше.
Изменить: Итак, после дальнейших исследований и обращения к ответу Хайме я смог использовать библиотеку web3j для создания объектов Java моего смарт-контракта при условии, что у меня есть исходный код, а web3j также подключает меня к клиенту, который в моем случае был клиентом Infura. это ссылка, которую вы получаете, когда бесплатно регистрируетесь в Infura. Я смог использовать объекты Java, которые представляли смарт-контракт, и вызывать его методы, которые взаимодействовали с основной сетью Ethereum (или с тестовой сетью, если хотите).
Спрашивающий
Infura
, но, честно говоря, я не знаю, как использовать его на моем телефоне Android? Кстати, второе требование, которое вы упомянули в своем ответеWeb3js
, вы имеете в видуWeb3j
или Web3js? Спасибо.Спрашивающий
Хайме
Джеймс_пик