Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Çø¿éÁ´ Hello World -- »ùÓÚÒÔÌ«·»µÄͶƱDapp
 
×÷ÕߣºHaythamXu
  2450  次浏览      32
 2020-2-25
 
±à¼­ÍƼö:
±¾ÎĽ²½âÒÔÌ«·»£¬ Çø¿éÁ´£¬ Dapp£¬ ÒÔÌ«·»hello worldµÈÏ£Íû¶ÔÄúÓÐËù°ïÖú
±¾ÎÄÀ´×ÔÓÚÌÚÑ¶ÔÆÉçÇø£¬ÓÉ»ðÁú¹ûÈí¼þDelores±à¼­¡¢ÍƼö¡£

Ö¸Â·ÅÆ

ÒÔÌ«·»

Çø¿éÁ´

Dapp

ÒÔÌ«·»hello world

»·¾³

windows 10 64bit

±³¾°

×¼±¸½ÓÊÖÒ»¸öIPFS+EthereumµÄÏîÄ¿£¬ÏÈѧϰһÏÂEthereum£¬²¢³¢ÊÔÍê³ÉÒ»¸öHello World¡£

²½Öè

°²×°nvmnvm install 9.11.1

nvm use 9.11.1npm install ganache-cli

npm install web3@0.20.1

npm install solc@0.4.21

°²×°node 9.11.1 ²¢Çл»»·¾³

´´½¨Ò»¸öÐµĹ¤×÷Ŀ¼£¬²¢ÔÚÃüÁîÐÐË÷Òýµ½¸Ã·¾¶

°²×°ganche-cli¡¢web3¡¢solc

Æô¶¯ganache-clinode_modules\.bin\ganache-cli

ganache-cliÆô¶¯ºóÊä³öÈçÏÂ

6. ʹÓÃSolidity´´½¨Smart Contract,ÃüÃûΪ£ºVoting.solpragma solidity ^0.4.18

contract Voting {
mapping (bytes32 => uint8) public votesReceived;
bytes32[] public candidateList;
function Voting(bytes32[] candidateNames)
public {
candidateList = candidateNames;
}
function totalVotesFor(bytes32 candidate) view
public returns (uint8) {
require(validCandidate(candidate));
return votesReceived[candidate];
}
function voteForCandidate(bytes32 candidate)
public {
require(validCandidate(candidate));
votesReceived[candidate] += 1;
}
function validCandidate(bytes32 candidate)
view public returns (bool) {
for(uint i = 0; i < candidateList.length; i++) {
if (candidateList[i] == candidate) {
return true;
}
}
return false;
}}> Web3 = require('web3')
> web3 = new Web3
(new Web3.providers.HttpProvider
("http://localhost:8545"))
> web3.eth.accounts ÊäÈëÒÔÉÏ×îºóÒ»ÌõÃüÁîºó»á
»ñÈ¡Ganache´´½¨µÄ10¸öÕʺţ¬ÈçÏÂ

Æô¶¯node½»»¥¿ØÖÆÌ¨£¬ÒÀ´ÎÊäÈëÒÔÏÂÃüÁî

> code = fs.readFileSync
('Voting.sol').toString()
> solc = require('solc')
> compiledCode = solc.compile(code)

È«²¿Íê³É»áµÃµ½ÈçϽØÍ¼µÄÊä³ö£¬±íʾsmart contract±àÒë³É¹¦

8.²¿Êðsmart contract

> abi = JSON.parse(compiledCode.contracts
[':Voting'].interface)
> VotingContract = web3.eth.contract(abi)
> byteCode = compiledCode.contracts
[':Voting'].bytecode
> deployedContract =
VotingContract.new(['James', 'Norah', 'Jones'],
{data: byteCode, from: web3.eth.accounts[0],
gas: 4700000})
> deployedContract.address

´Ëʱ»á»ñÈ¡address£¬¼ÇÏÂÀ´ºóÐø»áÓõ½contractInstance = VotingContract.at(deployedContract.address)ÏÂÔØweb3.jsÎļþ£¬ÏÂÔØºó·ÅÔÚ¹¤×÷¸ùĿ¼Ï¡£

ÓÉcdn²»ÖªÊ²Ã´Ô­Òò²»¿ÉÓã¬ËùÒÔÖ±½ÓÏÂÔØÔ´Îļþ

ÔÚ¸ùĿ¼Ï´´½¨index.htmlÎļþ£¬²¢Õ³ÌùÒÔÏ´úÂ룬ÐèÒªÔÚ½ØÍ¼±ê³ö´¦£¬¸ü»»³ÉµÚ8²½×Ô¼º²¿ÊðµÄsmart contractµÄaddress< !DOCTYPE html >

<html>
<head>
<title>DApp</title>
<link href=
'https://fonts.googleapis.com/css?family
=Open Sans:400,700'
rel='stylesheet' type='text/css'>
<link href=
'https://maxcdn.bootstrapcdn.com/bootstrap
/3.3.7/css/bootstrap.min.css'
rel='stylesheet' type='text/css'>
</head>
<body class="container">
<h1>Voting Application</h1>
<div class="table-responsive">
<table class="table table-bordered">
<thead>
<tr>
<th>Candidate</th>
<th>Votes</th>
</tr>
</thead>
<tbody>
<tr>
<td>James</td>
<td id="candidate-1"></td>
</tr>
<tr>
<td>Norah</td>
<td id="candidate-2"></td>
</tr>
<tr>
<td>Jones</td>
<td id="candidate-3"></td>
</tr>
</tbody>
</table>
</div>
<input type="text" id="candidate" />
<a href="#" onclick="voteForCandidate()"
class="btn btn-primary">Vote</a>
</body><script src="web3.js"></script>
<script src=
"https://code.jquery.com/jquery
-3.1.1.slim.min.js">
</script>
<script language="javascript"
type="text/javascript">
web3 = new Web3
(new Web3.providers.HttpProvider
("http://localhost:8545"));
abi = JSON.parse('[{"constant":false,
"inputs":[{"name":"candidate",
"type":"bytes32"}],
"name":"totalVotesFor",
"outputs":[{"name":"","type":"uint8"}],
"payable":false,
"type":"function"},{"constant":false,
"inputs":[{"name":"candidate",
"type":"bytes32"}],
"name":"validCandidate","outputs":
[{"name":"","type":"bool"}],
"payable":false,"type":"function"},
{"constant":true,"inputs":[{"name":"",
"type":"bytes32"}],
"name":"votesReceived",
"outputs":[{"name":"","type":"uint8"}],
"payable":false,
"type":"function"},
{"constant":true,"inputs":
[{"name":"x","type":"bytes32"}],
"name":"bytes32ToString",
"outputs":[{"name":"","type":"string"}],
"payable":false,"type":"function"},
{"constant":true,"inputs":[{"name":"",
"type":"uint256"}],"name":"candidateList",
"outputs":[{"name":"","type":"bytes32"}],
"payable":false,"type":"function"},
{"constant":false,"inputs":[{"name":"candidate",
"type":"bytes32"}],
"name":"voteForCandidate","outputs":[],
"payable":false,"type":"function"},
{"constant":true,"inputs":[],
"name":"contractOwner",
"outputs":[{"name":"","type":"address"}],
"payable":false,"type":"function"},
{"inputs":[{"name":"candidateNames",
"type":"bytes32[]"}],
"payable":false,"type":"constructor"}]')
VotingContract = web3.eth.contract(abi);
contractInstance = VotingContract.at
('0x47f49b300eb86d972f91f103913376fb0a8e52e7');
candidates = {"James": "candidate-1",
"Norah": "candidate-2", "Jones": "candidate-3"}
function voteForCandidate(candidate) {
candidateName = $("#candidate").val();
try {
contractInstance.voteForCandidate
(candidateName,
{from: web3.eth.accounts[0]}, function() {
let div_id = candidates[candidateName];
$("#"+div_id).html
(contractInstance.totalVotesFor.call
(candidateName).toString());
});
} catch (err) {
}
}
$(document).ready(function() {
candidateNames = Object.keys(candidates);
for (var i = 0;
i < candidateNames.length; i++) {
let name = candidateNames[i];
let val = contractInstance.totalVotesFor.
call(name).toString()
$("#"+candidates[name]).html(val);
}
});
</script></html>

ÔÚä¯ÀÀÆ÷´ò¿ªindex.html,ÊäÈëCandidateÖеÄÈËÃûºó£¬µã»÷Vote¼´¿ÉͶƱ£¬Í¶Æ±ºóЧ¹ûÈçÏÂ

ÿ´Îµã»÷ͶƱ£¬Ò²¶¼»áÉú³ÉÒ»¸öеÄÇø¿é£¬Ð§¹ûÈçÏ¡£

ºó¼Ç

ÒÔÉϲ½Öè¾ÍÍê³ÉÁËÒ»¸ö»ùÓÚEthereumµÄͶƱDappµÄÍêÕû´î½¨Á÷³Ì£¬ÕûºÏ¸ö²¹È«ºó²½ÖèÓ¦¸Ã²»»áÓпӵĿÉÒÔ˳Àû´î½¨Íê³É¡£

¾ÍÏñ¡°hello world¡±µÄ×ÖÃæÒâ˼һÑù£¬0-1µÄ¹ý³ÌÊÇ×î¼èÄѵ쬵«ÊÇ¿ªÁËÍ·£¬Ê£ÏµÄ1-nÒ²¾Í»á˳³©²»ÉÙ¡£

   
2450 ´Îä¯ÀÀ       32
 
Ïà¹ØÎÄÕÂ

iOSÓ¦Óð²È«¿ª·¢£¬Äã²»ÖªµÀµÄÄÇЩÊÂÊõ
Web°²È«Ö®SQL×¢Èë¹¥»÷
ÒÆ¶¯APP°²È«ÔÚÉøÍ¸²âÊÔÖеÄÓ¦ÓÃ
´ÓGoogle±¸·Ý»¥ÁªÍø¿´¡°Êý¾Ý°²È«¡±
 
Ïà¹ØÎĵµ

web°²È«Éè¼ÆÓë·À»¤
»¥ÁªÍøº£Á¿ÄÚÈݰ²È«´¦Àí¼¼Êõ
ºÚ¿Í¹¥»÷Óë·À·¶¼¼Êõ
WEBºÚºÐ°²È«¼ì²â
 
Ïà¹Ø¿Î³Ì

WEBÍøÕ¾ÓëÓ¦Óð²È«Ô­ÀíÓëʵ¼ù
webÓ¦Óð²È«¼Ü¹¹Éè¼Æ
´´½¨°²È«µÄJ2EE WebÓ¦ÓôúÂë
ÐÅÏ¢°²È«ÎÊÌâÓë·À·¶