Implementé un contrato inteligente con solidez junto con una GUI de Javascript y HTML. Este proyecto funciona bien en mi computadora.
Ahora quiero invocar las funciones de Smart Contract desde un teléfono Android.
¿Hay alguna posibilidad de hacer esto? Y si es así, ¿cómo hacer?
¿Y también necesito escribir mi contrato inteligente con Java
? o Solidity
la versión está bien?
Mi código de contrato inteligente de solidez:
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;
}
}
Lo que quiero hacer es invocar funciones de mi contrato por teléfono android.
Nota: Me registré Infura
, sin embargo, sinceramente, no sé cómo usarlo en mi teléfono Android para invocar las funciones de este contrato inteligente desde mi teléfono Android.
Si está preguntando cómo ejecutar DApps desde un dispositivo móvil Android, puede cargar la aplicación Toshi . Básicamente es un navegador con una billetera integrada y un nodo Ethereum en la parte posterior y ejecutará todas sus páginas web basadas en web3.js.
Toshi
desde AQUÍ Sin embargo, no sé cómo puedo invocar las funciones de mi contrato para enviar una transacción. Agregué el código fuente de mi contrato a mi pregunta. Gracias.ip address : 18.221.104.179
. Sin embargo, no sé cómo encontrar mi contrato en Toshi. Gracias de nuevo.18.221.104.179
recibo 502 captura de pantalla de puerta de enlace incorrecta mientras tanto, sinceramente, no entendí exactamente qué hace Toshi. Quiero decir, cuando cargamos un index.html
archivo en un servidor, no es posible interactuar con un contrato inteligente por ej. google chrome
navegador en lugar de Toshi
? GraciasToshi
tal manera que el contrato aún no se haya cargado en un servidor usando localhost
? Gracias.Toshi
? Gracias1. 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.
Debe consultar web3j en https://web3j.io/ Tienen una biblioteca Java que interactúa con la cadena de bloques Ethereum similar a la biblioteca JavaScript web3.js. Tiene una versión de Android, así como una versión vainilla de Java.
Geth se puede ejecutar tanto en Android como en iOS. Las compilaciones nocturnas de la rama de desarrollo siempre incluyen los archivos .aar de Android que puede vincular con un proyecto de Android Studio y el marco de iOS que puede usar en XCode.
Dado que Geth aún no presenta la funcionalidad de cliente ligero (que en realidad necesita actualizaciones del protocolo P2P global de Ethereum), es bastante pesado, pero será la forma oficial de ejecutar DApps móviles, y AFAIK solo Geth tiene incluso un concepto remoto sobre cliente ligero apoyo.
Se puede encontrar más información en esta pregunta.
Si está intentando conectarse a la red Ethereum desde una aplicación móvil nativa, consulte este tutorial de Geth para Android. Este es su enlace de Github .
También encontré esta biblioteca, Ethereum Android , pero aún no estoy seguro de sus capacidades.
Una tercera opción que encontré prometedora es Web3j .
Aunque todos parecen muy prometedores y se han desarrollado durante bastante tiempo, es un poco extraño que no haya suficientes tutoriales y documentación sobre ellos o incluso implementaciones en aplicaciones móviles que se conectan a la red Ethereum.
También estoy persiguiendo el mismo objetivo, así que no dude en ponerse en contacto conmigo más.
Editar: Entonces, después de investigar más y referirme a la respuesta de Jaime , pude usar la biblioteca web3j para crear objetos Java de mi contrato inteligente siempre que tuviera el código fuente y web3j también me conecta con el cliente, que en mi caso era un cliente Infura que es un enlace que obtienes cuando te registras en Infura de forma gratuita. Pude usar objetos Java, que representaban el contrato inteligente, e invocar sus métodos que interactuaban con la red principal de Ethereum (o la red de prueba, si eso es lo que desea).
Preguntador
Infura
, sin embargo, sinceramente, no sé cómo usarlo en mi teléfono Android. Por cierto, el segundo requisito que mencionaste en tu respuestaWeb3js
, ¿te refieres aWeb3j
Web3js? Gracias.Preguntador
Jaime
james_pic