Andino recursos
  • Andino recursos
    • 鉀擄笍Glosario Blockchain Web3
      • 馃Metamask Learing
      • Ecosistemas Layer 2
      • Gobernanza
        • 驴Qu茅 es una DAO?
      • Recompenzas en proyectos codigo abierto
  • 馃敶Optimism
    • Introducci贸n a Optimism
    • Gobernanza en Optimism
    • RETROPGF
    • Construye en Optimism
      • OP Stack
  • 馃數Base
    • Base y OP Stack
  • 馃敺Arbitrum
    • 驴Qu茅 es Arbitrum?
    • Arbitrum One y Arbitrum Nova
  • 馃煪Polygon
    • 驴Qu茅 es Polygon?
    • Desarrollar dApps en Polygon
      • Requisitos para desarrollar dapps en polygon
  • 馃煛Celo
    • 驴Qu茅 es Celo?
      • dApps en Celo
    • ReFi : Finanzas regenerativas
    • Construir en Celo
      • Herramientas para desarrolladores
        • Recursos para desarrolladores
        • Contract Kit
          • Configuraci贸n Contract Kit
          • Usando el Contract Kit
          • Hola - Contrato (Trufa + Nodo Remoto)
        • Celo Librer铆as & SDKs
          • Thirdweb SDK
  • 鉀擄笍POKT
    • 驴Qu茅 es POKT?
    • 驴C贸mo funciona una dApp?
    • 驴C贸mo funciona PKT Network?
    • Empezar a construir en POKT
    • C贸mo se ve Pocket en acci贸n: Un vistazo detallado
      • Nodies App - POKT Network
Powered by GitBook
On this page
  • 隆Hola mundo !
  • Preparar la implementaci贸n
  • Implementar en Alfajores (Remotamente )
  1. Celo
  2. Construir en Celo
  3. Herramientas para desarrolladores
  4. Contract Kit

Hola - Contrato (Trufa + Nodo Remoto)

PreviousUsando el Contract KitNextCelo Librer铆as & SDKs

Last updated 1 year ago

隆Hola mundo !

Agregar un contrato con el comando

truffle create contract HelloWorld

No entraremos en detalles sobre c贸mo escribir Solidity en este ejercicio, pero puede obtener m谩s informaci贸n en la .

El contrato s贸lo almacenar谩 un nombre por ahora:

contratos/HelloWorld.sol


pragma solidity >=0.5.0 <0.8.0;

contract HelloWorld {
  string name = 'Celo';

  function getName() public view returns (string memory) {
    return name;
  }

  function setName(string calldata newName) external {
    name = newName;
  }
}

Preparar la implementaci贸n

Antes de implementar el contrato, debe compilar el c贸digo de Solidity en el c贸digo de bytes de Ethereum. El siguiente comando trufa buscar谩 en el ./contractsdirectorio y compilar谩 cualquier contrato de Solidity () nuevo o actualizado .sol.

truffle compile

Despu茅s de compilar el contrato, debe crear una migraci贸n para implementar el contrato. Para eso, cree un archivo en la ./migrations/carpeta llamada 2_deploy_helloworld.js:

INFORMACI脫N

migraciones/2_deploy_helloworld.js

var HelloWorld = artifacts.require("HelloWorld");

module.exports = function (deployer) {
  deployer.deploy(HelloWorld);
};

INFORMACI脫N

Cuando implementa contratos en la red Celo con un nodo remoto, debe firmar la transacci贸n de implementaci贸n del contrato localmente antes de enviarla al nodo remoto para que se transmita a la red. Esto presenta algunos desaf铆os 煤nicos al usar herramientas de desarrollo de Ethereum (como Truffle) porque los objetos de transacci贸n de Celo son ligeramente diferentes a los objetos de transacci贸n de Ethereum.

Cuando est茅 listo para implementar su contrato en Alfajores, necesitar谩 un cliente Celo conectado a la red de prueba. En este ejercicio, se conectar谩 a un nodo remoto para leer y escribir en la red de prueba p煤blica (Alfajores), pero tambi茅n podr铆a ejecutar un nodo de red de prueba localmente para realizar las mismas acciones.

Estos son los pasos a seguir para implementar el contrato en la red de prueba de Alfajores.

  1. Con茅ctese a Forno (un proveedor de servicios de nodo Celo remoto)

  2. Obtener informaci贸n de la cuenta personal (generar una clave privada si es necesario, almacenada en ./.env)

  3. Obtenga el c贸digo de bytes del contrato compilado

  4. Crear y firmar la transacci贸n de implementaci贸n del contrato.

  5. Enviar transacci贸n a la red.

Aseg煤rese de que las dependencias est茅n instaladas con:

yarn install

Ejecute el script createAccount.js con:

node createAccount.js

crearCuenta.js

const Web3 = require("web3");
const web3 = new Web3("http://localhost:8545");

console.log(web3.eth.accounts.create());

El c贸digo proporcionado imprimir谩 un par de clave privada/cuenta en la terminal. Copie y pegue lo impreso priavteKeyen una PRIVATE_KEYvariable en un archivo llamado .env, similar a lo que se muestra en el .envexamplearchivo. La addressque est谩 impresa con la clave privada es la cuenta a la que financiaremos con el faucet.

Implementar el contrato

Implementaci贸n de trufa

Antes de poder utilizar trufa para la migraci贸n, debe establecer la configuraci贸n adecuada en ./truffle-config.js. En la parte superior de ./truffle-config.js, configure kitconect谩ndose a la red de prueba y agregando la cuenta que acaba de financiar.

trufa.config.js

const ContractKit = require("@celo/contractkit");
const Web3 = require("web3");
require("dotenv").config();

const web3 = new Web3("https://alfajores-forno.celo-testnet.org");
const kit = ContractKit.newKitFromWeb3(web3);

kit.connection.addAccount(process.env.PRIVATE_KEY);

Luego, en el networksobjeto, puede agregar el kitproveedor inicializado a una alfajorespropiedad.

trufa.config.js

  networks: {
    test: {
      host: "127.0.0.1",
      port: 7545,
      network_id: "*"
    },
    alfajores: {
      provider: kit.connection.web3.currentProvider, // CeloProvider
      network_id: 44787,                             // Alfajores network id
      gas: 4000000,            // You need to include the gas limit
    }
  }

INFORMACI脫N

Truffle no estima el gas correctamente, por lo que debes especificar un l铆mite de gas en truffle.config.js.

Ahora, despliega los contratos a Alfajores con este comando:

truffle migrate --network alfajores

En esta secci贸n, implementar谩 un contrato utilizando un script Node.js simple para mostrar c贸mo puede hacerlo sin usar Truffle.

Debe compilar el HelloWorld.solcontrato usando (si a煤n no lo est谩):

truffle compile

Este comando generar谩 un HelloWorld.jsonarchivo en el ./build/contracts/directorio. HelloWorld.jsonContiene una gran cantidad de datos sobre el contrato, el compilador y detalles de bajo nivel. Importe este archivo al script de implementaci贸n celo_deploy.jscon:

const HelloWorld = require("./build/contracts/HelloWorld.json");

Finalmente est谩 listo para implementar el contrato. Utilice kitpara crear una transacci贸n personalizada que incluya el c贸digo de bytes del contrato.

celo_deploy.js

let tx = await kit.connection.sendTransaction({
  from: address,
  data: HelloWorld.bytecode, // from ./build/contracts/HelloWorld.json
});

INFORMACI脫N

Para implementar un contrato en Celo, use la kit.connection.sendTransaction()funci贸n sin to:campo y el c贸digo de bytes del contrato en el datacampo. La cuenta desde la que env铆a la transacci贸n debe tener suficiente CELO para pagar la tarifa de transacci贸n, a menos que especifique otra moneda como feeCurrency, entonces necesitar谩 suficiente cantidad de esa moneda para pagar la tarifa de transacci贸n.

El script de implementaci贸n completo tiene aproximadamente 20 l铆neas de c贸digo.

celo_deploy.js

const Web3 = require("web3");
const ContractKit = require("@celo/contractkit");
const web3 = new Web3("https://alfajores-forno.celo-testnet.org");
const privateKeyToAddress =
  require("@celo/utils/lib/address").privateKeyToAddress;
const kit = ContractKit.newKitFromWeb3(web3);
require("dotenv").config();
const HelloWorld = require("./build/contracts/HelloWorld.json");

async function awaitWrapper() {
  kit.connection.addAccount(process.env.PRIVATE_KEY); // this account must have a CELO balance to pay transaction fees

  // This account must have a CELO balance to pay tx fees
  // get some testnet funds at https://faucet.celo.org
  const address = privateKeyToAddress(process.env.PRIVATE_KEY);
  console.log(address);

  let tx = await kit.connection.sendTransaction({
    from: address,
    data: HelloWorld.bytecode,
  });

  const receipt = await tx.waitReceipt();
  console.log(receipt);
}

awaitWrapper();

Ahora HelloWorld.sol est谩 implementado en la testnet de Alfajores. 驴C贸mo se puede interactuar con el contrato implementado utilizando ContractKit? helloWorld.jsIncluye un c贸digo de ejemplo que muestra c贸mo puedes hacer esto.

Hay 3 funciones definidas helloWorld.jsque logran esto.

La primera funci贸n initContract(), lee la informaci贸n del contrato implementado del artefacto Truffle en HelloWorld.json. Con esta informaci贸n, puede crear una nueva instancia de contrato web3.js:

holaMundo.js

async function initContract() {
  // Check the Celo network ID
  const networkId = await web3.eth.net.getId();

  // Get the contract associated with the current network
  const deployedNetwork = HelloWorld.networks[networkId];

  // Create a new contract instance with the HelloWorld contract info
  let instance = new kit.web3.eth.Contract(
    HelloWorld.abi,
    deployedNetwork && deployedNetwork.address
  );

  getName(instance);
  setName(instance, "hello world!");
}

Despu茅s de crear la instancia del contrato, la initContract()funci贸n llama getName()y setName().

La getName()funci贸n llamar谩, devolver谩 e imprimir谩 la getName()funci贸n de la instancia proporcionada del contrato HelloWorld.

holaMundo.js

async function getName(instance) {
  let name = await instance.methods.getName().call();
  console.log(name);
}

La setName()funci贸n es un poco m谩s complicada. Primero, obtiene la clave de la cuenta del ./secretarchivo proporcionado, como en celo_deploy.js. Luego crea una txObjectque codifica una llamada de transacci贸n de contrato inteligente setName()con la newNameinstancia proporcionada del contrato HelloWorld. Luego, la funci贸n env铆a el objeto de transacci贸n codificado a la red, espera un recibo y lo imprime en la consola.

holaMundo.js

async function setName(instance, newName) {
  // Add your account to ContractKit to sign transactions
  // This account must have a CELO balance to pay tx fees, get some https://faucet.celo.org
  kit.connection.addAccount(process.env.PRIVATE_KEY);
  const address = privateKeyToAddress(process.env.PRIVATE_KEY);

  // Encode the transaction to HelloWorld.sol according to the ABI
  let txObject = await instance.methods.setName(newName);

  // Send the transaction
  let tx = await kit.sendTransactionObject(txObject, { from: address });

  let receipt = await tx.waitReceipt();
  console.log(receipt);
}

El m茅todo anterior muestra m谩s detalles sobre c贸mo crear secuencias de comandos y transacciones de implementaci贸n personalizadas que el m茅todo anterior.

Como puede ver, todas las ventajas de Ethereum se aplican a Celo, por lo que pr谩cticamente todos los tutoriales y otro contenido deber铆an poder traducirse f谩cilmente a Celo.

compilar el

Puede

Implementar en Alfajores (Remotamente

Obtenga la direcci贸n de su cuenta personal y financ铆ela a trav茅s del

Si vas a la , puedes acceder a tu cuenta con CELO y ver c贸mo aumenta tu saldo.

personalizada de Node.js

隆Felicidades! 隆Has implementado tu primer contrato en Celo! Puede verificar la implementaci贸n de su contrato en . Puede obtener el hash de la transacci贸n del recibo y buscarlo en el explorador de bloques.

Interactuar con

馃煛
p谩gina de documentaci贸n de Solidity
contrato
Obtenga m谩s informaci贸n sobre las migraciones de trufas aqu铆.
obtener m谩s informaci贸n sobre las opciones de configuraci贸n de Truffle aqu铆.
)
faucet
p谩gina de Faucet de Alfajores
Implementaci贸n
Blockscout
contratos