1. Instale Node.js
https://nodejs.org/en/
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.
Esto le solicita que actualice npm.
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.
4. Utilice Truffle para crear un proyecto,
cree una carpeta de votación para almacenar el proyecto y luego cree el proyecto.
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
5. Cree el archivo de contrato Voting.sol en el directorio de contratos.
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".
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
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
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.
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.