1. Qué es la trufa
1. Información general
Truffle es un marco de desarrollo de Ethereum de clase mundial, lo que hace que el desarrollo de Ethereum sea simple y eficiente. Tiene las siguientes características:
- Compilación, vinculación, desarrollo y gestión binaria de contratos inteligentes incorporados.
- Pruebas de contrato automatizadas para un desarrollo rápido
- Scripting, implementación escalable y marco de migración.
- Gestión de red para implementación en cualquier número de redes públicas y privadas
- Basado en EthPM y NPM, y utiliza el estándar ERC190 para la gestión de paquetes
- Proporciona una consola interactiva para la comunicación de contratos.
- Proporciona una canalización de compilación configurable para una integración estrecha
- Ejecutar scripts de ejecución externos en el entorno Truffle
2. Sitio web oficial
El sitio web oficial es inestable y, a menudo, no se puede abrir
3. Localización del sitio web oficial
Clone el código localmente, compílelo y acceda a él localmente (¡perfecto!)
2. Cómo instalar la trufa
npm install -g truffle
Ejecute el siguiente comando para probar la instalación:
truffle version
3. Crea un proyecto vacío
3.1 Preparativos
mkdir truffleTest
cd truffleTest
3.2 Ejecución de comandos
truffle init
Efecto de ejecución:
se generarán los siguientes archivos en el directorio actual:
- contratos: almacenar archivos de contrato
- migraciones: almacenar archivos relacionados con la implementación
- prueba: utilizado para pruebas unitarias
- truffle.js: archivo de configuración, que le dice a truffle en qué red implementar (red de prueba, red principal, red privada, etc.), uso de plataforma que no sea Windows
- truffle-config.js: igual que truffle.js, solo para plataforma Windows
3.3 Agregar código de contrato
En la carpeta de contratos, cree un archivo SimpleStorage.sol y pegue el siguiente código:
pragma solidity ^0.8.14;
contract SimpleStorage {
uint storedData;
function set(uint x) public {
storedData = x;
}
function get() public view returns (uint) {
return storedData;
}
}
3.4 contrato de compilación de trufas
Ejecute el siguiente comando en nuestro proyecto:
truffle compile
En este momento, se generará el directorio de compilación y los resultados son los siguientes:
compile compilará nuestro código de Solidity en un código de bytes (código que la máquina virtual de Ethereum (EVM) puede entender), y los dos archivos en la carpeta de compilación El archivo se genera de acuerdo con el contrato. Cada archivo .sol compilará un archivo .json. El archivo de descripción json contiene el abi del contrato, el código de bytes y otra información relacionada para la implementación posterior.
3.5 contrato de despliegue de trufas
Por lo general, implementamos en los siguientes tres entornos:
- entorno gráfico ganache/entorno de línea de comandos ganache-cli
- Entorno real (prueba/mainnet)
3.7 Agregar secuencia de comandos de implementación
Abra la carpeta "migraciones" y cree un nuevo archivo llamado "2_deploy_contracts.js". Las migraciones son solo scripts que nos ayudan a implementar contratos en la cadena de bloques. Pegue el siguiente código en él y guárdelo.
```go
const SimpleStorage = artifacts.require("./SimpleStorage.sol");
module.exports = function (deployer) {
deployer.deploy(SimpleStorage);
};
La línea 1 se usa para importar el archivo "SimpleStorage.sol" (exportado desde la carpeta "contratos"), y la línea 4 lo implementa en la cadena de bloques.
4. Contrato de despliegue de trufas
4.1 Implementado en Ganache
Instalar línea de comando ganache-cli
sudo npm install -g ganache-cli
Modifique truffle-config.js de la siguiente manera:
module.exports = {
// See <http://truffleframework.com/docs/advanced/configuration>
// to customize your Truffle configuration!
networks: {
ganacheNet: {
//ganacheNet是可以⾃定义的名字,链接到ganache客户端
host: "127.0.0.1",
port: 8545,
network_id: "*" // match any network
}
}
}
Después de iniciar ganache, ejecute el siguiente comando
truffle migrate --network ganacheNet
Este ganacheNet es lo que agregamos manualmente en el archivo de configuración truffle.js
4.2 Despliegue en modo de desarrollo de trufas
Ejecute el siguiente comando en el proyecto:
truffle develop
Inicie el entorno de desarrollo incorporado, el efecto es el siguiente:
después de iniciar, ingresará a la interfaz interactiva, iniciará el servicio local de forma predeterminada, ocupará el número de puerto 9545 y creará 10 cuentas virtuales al mismo tiempo, cada cuenta contiene 100 eth
-compile comandos
por defecto en la terminal Ejecute compile
el comando directamente en el comando para completar la compilación.
Resultado: se generará el directorio de compilación, igual que el anterior.
- comando de migración
Ejecute migrate
el comando directamente en la terminal para completar la implementación. (No es necesario implementar la red aquí, es una red virtual en sí misma, pero no podemos verla)
Cuando ejecutamos la migración, este comando actualizará el archivo SimpleStorage.json y se implementará en esta red específica El contrato se guardan la dirección y el hash de la transacción correspondiente. Luego podemos llamar a nuestro contrato a través de la información en este archivo json. (descrito más adelante)
5. Interactuar con el contrato
La consola truffle viene con una instancia web3 y se ha creado una instancia de contrato en la consola, que se puede usar directamente. Este contrato instanciado no es el modo que usamos antes, sino una instancia envuelta con una biblioteca llamada truffle-contract.
- En este entorno de desarrollo, hay una instancia web3 incorporada
, podemos verificar la versión de web3:
usamos la consola para interactuar con el contrato - Al usar el marco de truffle para obtener una instancia de contrato
, usaremos la biblioteca de truffle: truffle-contract, que encapsula el web3.js nativo para lograr llamadas de contrato más convenientes. - Llamar a la función de conjunto
- función de obtención de llamada
Seis, prueba prueba
El contrato debe comenzar con Test y el nombre de la función debe comenzar con Test
Code:
import "truffle/Assert.sol";
import "truffle/DeployedAddresses.sol";
import "../contracts/SimpleStorage.sol";
//合约名字要Test开头
contract TestMetaCoin {
//测试函数要test开头
function testSet() public{
SimpleStorage ss = SimpleStorage(DeployedAddresses.SimpleStorage());
ss.set(100);
uint res=ss.get();
Assert.equal(res,100,"res shoulid be 1000");
}
}
implementartruffle test