Implementación de cadena de bloques

1. Instale Node.js
https://nodejs.org/en/
Insertar descripción de la imagen aquí

Una vez completada la instalación, verifique la versión instalada.
2. Instale Trufa.
Truffle es un marco de desarrollo de contratos inteligentes de Solidity que puede ayudar a los desarrolladores a desarrollar rápidamente una DApp.
Insertar descripción de la imagen aquí

Esto le solicita que actualice npm.

Insertar descripción de la imagen aquí

3. Instale Ganache CLI o ganache
Ganache CLI es la versión de línea de comando del software ganache del emulador de nodos Ethereum. Puede facilitar que los desarrolladores desarrollen rápidamente Ethereum Dapp.

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

4. Utilice Truffle para crear un proyecto,
cree una carpeta de votación para almacenar el proyecto y luego cree el proyecto.
Insertar descripción de la imagen aquí

Se informa un error y no se puede conectar la conexión. Puede ir directamente a github para descargar el proyecto
https://github.com/truffle-box/react-box

Insertar descripción de la imagen aquí

5. Cree el archivo de contrato Voting.sol en el directorio de contratos.

Insertar descripción de la imagen aquí

pragma solidity ^0.4.18;
contract Voting {
  /*
  mapping:称为映射或者字典,一种键值对的映射关系存储结构
  mapping的key:存储类型为bytes32,存储的是候选人名字
  mapping的value:存储类型为uint8的无符号整型,
  bytes32类型:能存储32个字节,即32*8=256位的二进制内容
  uint8类型:能存储8个字节,即8*8=64位的二进制内容
  */
  mapping (bytes32 => uint8) public votesReceived;
  /*
  Solidity目前不允许字符串数组,这里使用bytes32类型的数组来存储候选人名字
  */
  bytes32[] public candidateList;
  /*
  构造函数,传入bytes32类型的数组,初始化所有候选人名字
  */
  constructor(bytes32[] candidateNames) public {
    candidateList = candidateNames;
  }
  /*
    查询指定候选人的总票数
  */
  function totalVotesFor(bytes32 candidate) constant public returns (uint8) {
    /*
    require像其他语言中的断言(assert),用于条件检查。
    条件满足时继续执行,条件不满足则抛出异常。
    */
    require(validCandidate(candidate));
    return votesReceived[candidate];
  }
  /*
    对指定候选人进行投票
  */
  function voteForCandidate(bytes32 candidate) public {
    // 投票前判断是否为候选人名字
    require(validCandidate(candidate));
    votesReceived[candidate] += 1;
  }
  /*
    检查投票名字的有效性,即判断投票名字是否在候选人名字里面
  */
  function validCandidate(bytes32 candidate) constant public returns (bool) {
    // 循环遍历候选人列表
    for(uint i = 0; i < candidateList.length; i++) {
      // 判断投票名字是否为候选人
      if (candidateList[i] == candidate) {
        return true;
      }
    }
    return false;
  }
}

6. Escriba un script de implementación de contrato inteligente.
Cree un nuevo archivo en el directorio de migraciones con el nombre "3_deploy_voting.js".
Insertar descripción de la imagen aquí

var Voting = artifacts.require("./Voting.sol");
module.exports = function(deployer) {
  deployer.deploy(Voting, ['Jack Chen', 'Andy Lau', 'Stephen Chow', 'Wenzil'], {
    gas: 6700000
  });
};

7. Modificar trufa.js
Insertar descripción de la imagen aquí

Ponga el gas para evitar olvidar la operación más tarde.
8. Configure la metamáscara, nota: el ID de cadena predeterminado es 1337
Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

9. Importe la cuenta a través de la clave privada. Después de la importación, puede realizar operaciones de transferencia ETH entre nodos.
Insertar descripción de la imagen aquí

10. Completar la creación de bloques mediante transferencias mutuas. Cada vez que se realiza una transferencia, se vinculará un nuevo bloque a toda la cadena.

Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_46504000/article/details/129426424
Recomendado
Clasificación