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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓƵ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Solidity ±à³ÌʵÀý
 
  2700  次浏览      19
2020-4-20
 
±à¼­ÍƼö:
ÎÄÕÂÖ÷ҪչʾÈçºÎίÍÐͶƱ¿ÉÒÔͬʱ×öµ½Í¶Æ±Í³¼ÆÊÇ×Ô¶¯ºÍÍêȫ͸Ã÷£¬Ï£Íû¶ÔÄúÄÜÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚ Solidity ¹Ù·½ÎĵµÖÐÎİ棬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼­¡¢ÍƼö¡£

Voting ͶƱ

½ÓÏÂÀ´µÄºÏÔ¼·Ç³£¸´ÔÓ£¬µ«Õ¹Ê¾Á˺ܶàSolidityµÄÌØÐÔ¡£ËüʵÏÖÁËÒ»¸öͶƱºÏÔ¼¡£µ±È»£¬µç×ÓÑ¡¾ÙµÄÖ÷ÒªÎÊÌâÊÇÈçºÎ¸³ÓèͶƱȨ¸ø׼ȷµÄÈË£¬²¢·ÀÖ¹²Ù×Ý¡£ÎÒÃDz»Äܽâ¾öËùÓеÄÎÊÌ⣬µ«ÖÁÉÙÎÒÃÇ»áչʾÈçºÎίÍÐͶƱ¿ÉÒÔͬʱ×öµ½Í¶Æ±Í³¼ÆÊÇ×Ô¶¯ºÍÍêȫ͸Ã÷¡£

˼·ÊÇΪÿÕÅѡƱ´´½¨Ò»¸öºÏÔ¼£¬Ã¿¸öͶƱѡÏîÌṩһ¸ö¶ÌÃû³Æ¡£ºÏÔ¼´´½¨Õß×÷Ϊ»á³¤½«»á¸øÿ¸öͶƱ²ÎÓëÈ˸÷×ԵĵØַͶƱȨ¡£

µØÖ·ºóÃæµÄÈËÃÇ¿ÉÒÔÑ¡Ôñ×Ô¼ºÍ¶Æ±»òÕßίÍÐÐÅÈεĴú±íÈËÌæËûÃÇͶƱ¡£ÔÚͶƱ½áÊøºó£¬winningProposal()½«»á·µ»Ø»ñµÃƱÊý×î¶àµÄÌá°¸¡£

/// @title Voting with delegation.
/// @title ÊÚȨͶƱ
contract Ballot
{
// ÕâÀïÉùÃ÷Á˸´ÔÓÀàÐÍ
// ½«»áÔÚ±»ºóÃæµÄ²ÎÊýʹÓÃ
// ´ú±íÒ»¸ö¶ÀÁ¢µÄͶƱÈË¡£
struct Voter
{
uint weight; // ÀÛ»ýµÄȨÖØ¡£
bool voted; // Èç¹ûΪÕ棬Ôò±íʾ¸ÃͶƱÈËÒѾ­Í¶Æ±¡£
address delegate; // ίÍеÄͶƱ´ú±í
uint vote; // ͶƱѡÔñµÄÌá°¸Ë÷ÒýºÅ
}

// ÕâÊÇÒ»¸ö¶ÀÁ¢Ìá°¸µÄÀàÐÍ
struct Proposal
{
bytes32 name; // ¶ÌÃû³Æ£¨32×Ö½Ú£©
uint voteCount; // ÀۼƻñµÃµÄƱÊý
}
address public chairperson;
//ÕâÀïÉùÃ÷Ò»¸ö״̬±äÁ¿£¬±£´æÿ¸ö¶ÀÁ¢µØÖ·µÄ`Voter` ½á¹¹
mapping(address => Voter) public voters;
//Ò»¸ö´æ´¢`Proposal`½á¹¹µÄ¶¯Ì¬Êý×é
Proposal[] public proposals;
// ´´½¨Ò»¸öеÄͶƱÓÃÓÚÑ¡³öÒ»¸öÌá°¸Ãû`proposalNames`.
function Ballot(bytes32[] proposalNames)
{
chairperson = msg.sender;
voters[chairperson].weight = 1;
//¶ÔÌṩµÄÿһ¸öÌá°¸Ãû³Æ£¬´´½¨Ò»¸öеÄÌá°¸
//¶ÔÏóÌí¼Óµ½Êý×éĩβ
for (uint i = 0; i < proposalNames.length; i++)
//`Proposal({...})` ´´½¨ÁËÒ»¸öÁÙʱµÄÌá°¸¶ÔÏó£¬
//`proposal.push(...)`Ìí¼Óµ½ÁËÌá°¸Êý×é`proposals`ĩβ¡£
proposals.push(Proposal({
name: proposalNames[i],
voteCount: 0
}));
}
//¸øͶƱÈË`voter`²Î¼ÓͶƱµÄͶƱȨ£¬
//Ö»ÄÜÓÉͶƱÖ÷³ÖÈË`chairperson`µ÷Óá£
function giveRightToVote(address voter)
{
if (msg.sender != chairperson || voters[voter].voted)
//`throw`»áÖÕÖ¹ºÍ³·ÏúËùÓеÄ״̬ºÍÒÔÌ«¸Ä±ä¡£
//Èç¹ûº¯Êýµ÷ÓÃÎÞЧ£¬Õâͨ³£ÊÇÒ»¸öºÃµÄÑ¡Ôñ¡£
//µ«ÊÇÐèҪעÒ⣬Õâ»áÏûºÄÌṩµÄËùÓÐgas¡£
throw;
voters[voter].weight = 1;
}
// ίÍÐÄãµÄͶƱȨµ½Ò»¸öͶƱ´ú±í `to`¡£
function delegate(address to)
{
// Ö¸¶¨ÒýÓÃ
Voter sender = voters[msg.sender];
if (sender.voted)
throw;
//µ±Í¶Æ±´ú±í`to`ҲίÍиø±ðÈËʱ£¬Ñ°ÕÒµ½×îÖÕµÄͶƱ´ú±í
while (voters[to].delegate != address(0) &&
voters[to].delegate != msg.sender)
to = voters[to].delegate;
// µ±×îÖÕͶƱ´ú±íµÈÓÚµ÷ÓÃÕߣ¬ÊDz»±»ÔÊÐíµÄ¡£
if (to == msg.sender)
throw;
//ÒòΪ`sender`ÊÇÒ»¸öÒýÓã¬
//ÕâÀïʵ¼ÊÐÞ¸ÄÁË`voters[msg.sender].voted`
sender.voted = true;
sender.delegate = to;
Voter delegate = voters[to];
if (delegate.voted)
//Èç¹ûίÍеÄͶƱ´ú±íÒѾ­Í¶Æ±ÁË£¬Ö±½ÓÐÞ¸ÄƱÊý
proposals[delegate.vote].voteCount += sender.weight;
else
//Èç¹ûͶƱ´ú±í»¹Ã»ÓÐͶƱ£¬ÔòÐÞ¸ÄÆäͶƱȨÖØ¡£
delegate.weight += sender.weight;
}
///Ͷ³öÄãµÄѡƱ£¨°üÀ¨Î¯ÍиøÄãµÄѡƱ£©
///¸ø `proposals[proposal].name`¡£
function vote(uint proposal)
{
Voter sender = voters[msg.sender];
if (sender.voted) throw;
sender.voted = true;
sender.vote = proposal;
//Èç¹û`proposal`Ë÷Òý³¬³öÁ˸ø¶¨µÄÌá°¸Êý×鷶Χ
//½«»á×Ô¶¯Å׳öÒì³££¬²¢³·ÏúËùÓеĸı䡣
proposals[proposal].voteCount += sender.weight;
}
///@dev ¸ù¾Ýµ±Ç°ËùÓеÄͶƱ¼ÆËã³öµ±Ç°µÄʤ³öÌá°¸
function winningProposal() constant
returns (uint winningProposal)
{
uint winningVoteCount = 0;
for (uint p = 0; p < proposals.length; p++)
{
if (proposals[p].voteCount > winningVoteCount)
{
winningVoteCount = proposals[p].voteCount;
winningProposal = p;
}
}
}
}

¿ÉÄܵĸĽø

ÏÖÔÚ£¬Ö¸ÅÉͶƱȨµ½ËùÓеÄͶƱ²Î¼ÓÕßÐèÒªÐí¶àµÄ½»Òס£ÄãÄÜÏë³ö¸üºÃµÄ·½·¨Ã´£¿

äÅÄ

ÕâÒ»½Ú£¬ÎÒÃǽ«Õ¹Ê¾ÔÚÒÔÌ«ÉÏ´´½¨Ò»¸öÍêÕûµÄäÅĺÏÔ¼ÊǶàô¼òµ¥¡£ÎÒÃÇ´ÓÒ»¸öËùÓÐÈ˶¼ÄÜ¿´µ½³ö¼ÛµÄ¹«¿ªÅÄÂô¿ªÊ¼£¬½Ó×ÅÀ©Õ¹ºÏÔ¼³ÉΪһ¸öÔÚÅÄÂô½áÊøÒÔÇ°²»ÄÜ¿´µ½Êµ¼Ê³ö¼ÛµÄäÅÄ¡£

¼òµ¥µÄ¹«¿ªÅÄÂô

ͨ³£¼òµ¥µÄ¹«¿ªÅÄÂôºÏÔ¼£¬ÊÇÿ¸öÈË¿ÉÒÔÔÚÅÄÂôÆڼ䷢ËÍËûÃǵľºÅijö¼Û¡£ÎªÁËʵÏְ󶨾ºÅÄÈ˵ĵ½ËûÃǵÄÅÄÂô£¬¾ºÅÄ°üÀ¨·¢Ëͽð¶î/ether¡£Èç¹û²úÉúÁËеÄ×î¸ß¾ºÅļۣ¬Ç°Ò»¸ö×î¸ß¼Û¾ºÅÄÈ˽«»áÄûØËûµÄÇ®¡£ÔÚ¾ºÅĽ׶νáÊøºó£¬ÊÜÒæÈËÈËÐèÒªÊÖ¶¯µ÷ÓúÏÔ¼ÊÕÈ¡ËûµÄÇ® ¡ª ¡ª ºÏÔ¼²»»á¼¤»î×Ô¼º¡£

contract SimpleAuction {
// ÅÄÂôµÄ²ÎÊý¡£
// ʱ¼äҪôΪunix¾ø¶Ôʱ¼ä´Á£¨×Ô1970-01-01ÒÔÀ´µÄÃëÊý£©£¬
// »òÕßÊÇÒÔÃëΪµ¥Î»µÄ³ö¿éʱ¼ä
address public beneficiary;
uint public auctionStart;
uint public biddingTime;
//µ±Ç°µÄÅÄÂô״̬
address public highestBidder;
uint public highestBid;
//ÔÚ½áÊøʱÉèÖÃΪtrueÀ´¾Ü¾øÈκθıä
bool ended;
//µ±¸Ä±äʱ½«»á´¥·¢µÄEvent
event HighestBidIncreased(address bidder, uint amount);
event AuctionEnded(address winner, uint amount);
//ÏÂÃæÊÇÒ»¸ö½Ð×önatspecµÄÌØÊâ×¢ÊÍ£¬
//ÓÉ3¸öÁ¬ÐøµÄб¸Ü±ê¼Ç£¬µ±Ñ¯ÎÊÓû§È·ÈϽ»Ò×ÊÂÎñʱ½«ÏÔʾ¡£
///´´½¨Ò»¸ö¼òµ¥µÄºÏԼʹÓÃ`_biddingTime`±íʾµÄ¾ºÅÄʱ¼ä£¬
/// µØÖ·`_beneficiary`.´ú±íʵ¼ÊµÄÅÄÂôÕß
function SimpleAuction(uint _biddingTime,
address _beneficiary) {
beneficiary = _beneficiary;
auctionStart = now;
biddingTime = _biddingTime;
}
///¶ÔÅÄÂôµÄ¾ºÅı£Ö¤½ð»áËæ׎»Ò×ÊÂÎñÒ»Æð·¢ËÍ£¬
///Ö»ÓÐÔÚ¾ºÅÄʧ°ÜµÄʱºò²Å»áÍË»Ø
function bid() {
//²»ÐèÒªÈκβÎÊý£¬ËùÓеÄÐÅÏ¢ÒѾ­Êǽ»Ò×ÊÂÎñµÄÒ»²¿·Ö
if (now > auctionStart + biddingTime)
//µ±¾ºÅĽáÊøʱ³·Ïú´Ëµ÷ÓÃ
throw;
if (msg.value <= highestBid)
//Èç¹û³ö¼Û²»ÊÇ×î¸ßµÄ£¬·¢»Ø¾ºÅı£Ö¤½ð¡£
throw;
if (highestBidder != 0)
highestBidder.send(highestBid);
highestBidder = msg.sender;
highestBid = msg.value;
HighestBidIncreased(msg.sender, msg.value);
}
///ÅÄÂô½áÊøºó·¢ËÍ×î¸ßµÄ¾º¼Ûµ½ÅÄÂôÈË
function auctionEnd() {
if (now <= auctionStart + biddingTime)
throw;
//ÅÄÂô»¹Ã»ÓнáÊø
if (ended)
throw;
//Õâ¸öÊտÊýÒѾ­±»µ÷ÓÃÁË
AuctionEnded(highestBidder, highestBid);
//·¢ËͺÏÔ¼ÓµÓÐËùÓеÄÇ®£¬ÒòΪÓÐһЩ±£Ö¤½ð¿ÉÄÜÍË»Øʧ°ÜÁË¡£
beneficiary.send(this.balance);
ended = true;
}
function () {
//Õâ¸öº¯Êý½«»áÔÚ·¢Ë͵½ºÏÔ¼µÄ½»Ò×ÊÂÎñ°üº¬ÎÞЧÊý¾Ý
//»òÎÞÊý¾ÝµÄʱִÐУ¬ÕâÀï³·ÏúËùÓеķ¢ËÍ£¬
//ËùÒÔûÓÐÈË»áÔÚʹÓúÏԼʱÒòΪÒâÍâ¶ø¶ªÇ®¡£
throw;
}
}

Blind Auction äÅÄ

½ÓÏÂÀ´À©Õ¹Ç°ÃæµÄ¹«¿ªÅÄÂô³ÉΪһ¸öäÅÄ¡£Ã¤ÅĵÄÌصãÊÇÅÄÂô½áÊøÒÔǰûÓÐʱ¼äѹÁ¦¡£ÔÚÒ»¸ö͸Ã÷µÄ¼ÆËãƽ̨ÉÏ´´½¨Ã¤ÅÄϵͳÌýÆðÀ´¿ÉÄÜÓÐЩì¶Ü£¬µ«ÊǼÓÃÜËã·¨ÄÜÈÃÄãÍÑÀëÀ§¾³¡£

ÔÚÅÄÂô½×¶Î, ¾ºÅÄÈ˲»ÐèÒª·¢ËÍʵ¼ÊµÄ³ö¼Û£¬½ö½öÖ»ÐèÒª·¢ËÍÒ»¸öËüµÄÉ¢ÁÐÖµ¡£ÒòΪĿǰ¼¸ºõ²»¿ÉÄÜÕÒµ½Á½¸öÖµ£¨×ã¹»³¤£©µÄÉ¢ÁÐÖµÏàµÈ£¬¾ºÅÄÕßÌá½»ËûÃǵijö¼ÛÉ¢ÁÐÖµ¡£ÔÚÅÄÂô½áÊøºó£¬¾ºÅÄÈËÖØз¢ËÍδ¼ÓÃܵľºÅijö¼Û£¬ºÏÔ¼½«¼ì²éÆäÉ¢ÁÐÖµÊÇ·ñºÍÅÄÂô½×¶Î·¢Ë͵ÄÒ»Ñù¡£ ÁíÒ»¸öÌôÕ½ÊÇÈçºÎÈÃÅÄÂôͬʱʵÏְ󶨺ÍÖÂä £º·ÀÖ¹¾ºÅÄÈ˾ºÅijɹ¦ºó²»¸¶Ç®µÄΨһµÄ°ì·¨ÊÇ£¬ÔÚ¾ºÅijö¼ÛµÄͬʱ·¢Ëͱ£Ö¤½ð¡£µ«ÊÇÔÚEthereumÉÏ·¢Ëͱ£Ö¤½ðÊÇÎÞ·¨ÖÂ䣬ËùÓÐÈ˶¼ÄÜ¿´µ½±£Ö¤½ð¡£ÏÂÃæµÄºÏԼͨ¹ý½ÓÊÜÈκξ¡Á¿´óµÄ³ö¼ÛÀ´½â¾öÕâ¸öÎÊÌâ¡£µ±È»Õâ¿ÉÒÔÔÚ×îºóµÄ½ÒÅĽ׶νøÐи´ºË£¬Ò»Ð©¾ºÅijö¼Û¿ÉÄÜÊÇÎÞЧµÄ£¬ÕâÑù×öµÄÄ¿µÄÊÇ£¨ËüÌṩһ¸öÏÔʽµÄ±êÖ¾Ö¸³öÊÇÎÞЧµÄ¾ºÅÄ£¬Í¬Ê±°üº¬¸ß¶î±£Ö¤½ð£©£º¾ºÅÄÈË¿ÉÒÔͨ¹ý·ÅÖü¸¸öÎÞЧµÄ¸ß¼ÛºÍµÍ¼Û¾ºÅÄÀ´»ìÏý¾ºÕù¶ÔÊÖ¡£

contract BlindAuction
{
struct Bid
{
bytes32 blindedBid;
uint deposit;
}
address public beneficiary;
uint public auctionStart;
uint public biddingEnd;
uint public revealEnd;
bool public ended;
mapping(address => Bid[]) public bids;
address public highestBidder;
uint public highestBid;
event AuctionEnded(address winner, uint highestBid);
///ÐÞÊÎÆ÷£¨Modifier£©ÊÇÒ»¸ö¼ò±ãµÄ;¾¶ÓÃÀ´ÑéÖ¤º¯ÊýÊäÈëµÄÓÐЧÐÔ¡£
///`onlyBefore` Ó¦ÓÃÓÚÏÂÃæµÄ `bid`º¯Êý£¬Æä¾ÉµÄº¯ÊýÌåÌæ»»ÐÞÊÎÆ÷Ö÷ÌåÖÐ `_`ºó¾ÍÊÇÆäеĺ¯ÊýÌå
modifier onlyBefore(uint _time) { if (now >= _time) throw; _ }
modifier onlyAfter(uint _time) { if (now <= _time) throw; _ }
function BlindAuction(uint _biddingTime,
uint _revealTime,
address _beneficiary)
{
beneficiary = _beneficiary;
auctionStart = now;
biddingEnd = now + _biddingTime;
revealEnd = biddingEnd + _revealTime;
}
///·ÅÖÃÒ»¸öäÅijö¼ÛʹÓÃ`_blindedBid`=sha3(value,fake,secret).
///½ö½öÔÚ¾ºÅĽáÊøÕý³£½ÒÅĺóÍË»¹·¢Ë͵ÄÒÔÌ«¡£µ±Ëæͬ·¢Ë͵ÄÒÔÌ«ÖÁÉÙ
///µÈÓÚ "value"Ö¸¶¨µÄ±£Ö¤½ð²¢ÇÒ "fake"²»ÎªtrueµÄʱºò²ÅÊÇÓÐЧµÄ¾ºÅÄ
///³ö¼Û¡£ÉèÖà "fake"Ϊtrue»ò·¢ËͲ»ºÏÊʵĽð¶î½«»áÑÚûÕæÕýµÄ¾ºÅijö
///¼Û£¬µ«ÊÇÈÔÈ»ÐèÒªµÖѺ±£Ö¤½ð¡£Í¬Ò»¸öµØÖ·¿ÉÒÔ·ÅÖöà¸ö¾ºÅÄ¡£
function bid(bytes32 _blindedBid)
onlyBefore(biddingEnd)
{
bids[msg.sender].push(Bid({
blindedBid: _blindedBid,
deposit: msg.value
}));
} ///½Ò¿ªÄãµÄäÅľº¼Û¡£Ä㽫»áÄûسýÁË×î¸ß³ö¼ÛÍâµÄËùÓоºÅı£Ö¤½ð
///ÒÔ¼°Õý³£µÄÎÞЧäÅı£Ö¤½ð¡£
function reveal(uint[] _values, bool[] _fake,
bytes32[] _secret)
onlyAfter(biddingEnd)
onlyBefore(revealEnd)
{
uint length = bids[msg.sender].length;
if (_values.length != length || _fake.length != length ||
_secret.length != length)
throw;
uint refund;
for (uint i = 0; i < length; i++)
{
var bid = bids[msg.sender][i];
var (value, fake, secret) =
(_values[i], _fake[i], _secret[i]);
if (bid.blindedBid != sha3(value, fake, secret))
//³ö¼Ûδ±»Õý³£½ÒÅÄ£¬²»ÄÜÈ¡»Ø±£Ö¤½ð¡£
continue;
refund += bid.deposit;
if (!fake && bid.deposit >= value)
if (placeBid(msg.sender, value))
refund -= value;
//±£Ö¤·¢ËÍÕß¾ø²»¿ÉÄÜÖظ´È¡»Ø±£Ö¤½ð
bid.blindedBid = 0;
}
msg.sender.send(refund);
}
//ÕâÊÇÒ»¸öÄÚ²¿ (internal)º¯Êý£¬
//Òâζ׎ö½öÖ»ÓкÏÔ¼£¨»òÕß´ÓÆä¼Ì³ÐµÄºÏÔ¼£©¿ÉÒÔµ÷ÓÃ
function placeBid(address bidder, uint value) internal
returns (bool success)
{
if (value <= highestBid)
return false;
if (highestBidder != 0)
//ÍË»¹Ç°Ò»¸ö×î¸ß¾ºÅijö¼Û
highestBidder.send(highestBid);
highestBid = value;
highestBidder = bidder;
return true;
}
///¾ºÅĽáÊøºó·¢ËÍ×î¸ß³ö¼Ûµ½¾ºÅÄÈË
function auctionEnd()
onlyAfter(revealEnd)
{
if (ended) throw;
AuctionEnded(highestBidder, highestBid);
//·¢ËͺÏÔ¼ÓµÓÐËùÓеÄÇ®£¬ÒòΪÓÐһЩ±£Ö¤½ðÍ˻ؿÉÄÜʧ°ÜÁË¡£
beneficiary.send(this.balance);
ended = true;
}
function () { throw; }
}
Safe Remote Purchase °²È«µÄÔ¶³Ì¹ºÎï
contract Purchase
{
uint public value;
address public seller;
address public buyer;
enum State { Created, Locked, Inactive }
State public state;
function Purchase()
{
seller = msg.sender;
value = msg.value / 2;
if (2 * value != msg.value) throw;
}
modifier require(bool _condition)
{
if (!_condition) throw;
_
}
modifier onlyBuyer()
{
if (msg.sender != buyer) throw;
_
}
modifier onlySeller()
{
if (msg.sender != seller) throw;
_
}
modifier inState(State _state)
{
if (state != _state) throw;
_
}
event aborted();
event purchaseConfirmed();
event itemReceived();
///ÖÕÖ¹¹ºÎï²¢ÊÕ»ØÒÔÌ«¡£½ö½ö¿ÉÒÔÔÚºÏԼδËø¶¨Ê±±»Âô¼Òµ÷Óá£
function abort()
onlySeller
inState(State.Created)
{
aborted();
seller.send(this.balance);
state = State.Inactive;
}
///Âò¼ÒÈ·ÈϹºÂò¡£½»Ò×°üº¬Á½±¶¼ÛÖµµÄ£¨`2 * value`£©ÒÔÌ«¡£
///ÕâЩÒÔÌ«»áÒ»Ö±Ëø¶¨µ½ÊÕ»õÈ·ÈÏ(confirmReceived)±»µ÷Óá£
function confirmPurchase()
inState(State.Created)
require(msg.value == 2 * value)
{
purchaseConfirmed();
buyer = msg.sender;
state = State.Locked;
}
///È·ÈÏÄ㣨Âò¼Ò£©ÊÕµ½ÁË»õÎÕ⽫ÊÍ·ÅËø¶¨µÄÒÔÌ«¡£
function confirmReceived()
onlyBuyer
inState(State.Locked)
{
itemReceived();
buyer.send(value);//ÎÒÃÇÓÐÒâºöÂÔÁË·µ»ØÖµ¡£
seller.send(this.balance);
state = State.Inactive;
}
function() { throw; }
}
   
2700 ´Îä¯ÀÀ       19
 
Ïà¹ØÎÄÕÂ

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

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

WEBÍøÕ¾ÓëÓ¦Óð²È«Ô­ÀíÓëʵ¼ù
webÓ¦Óð²È«¼Ü¹¹Éè¼Æ
´´½¨°²È«µÄJ2EE WebÓ¦ÓôúÂë
ÐÅÏ¢°²È«ÎÊÌâÓë·À·¶
×îл¼Æ»®
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù 8-23[ÌØ»Ý]
LinuxÄں˱à³Ì¼°É豸Çý¶¯ 8-15[±±¾©]
Python¡¢Êý¾Ý·ÖÎöÓë»úÆ÷ѧϰ 8-23[ÌØ»Ý]
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ 8-22[ÏßÉÏ]
QTÓ¦Óÿª·¢ 9-5[±±¾©]
 
×îÐÂÎÄÕÂ
ÎïÁªÍø°²È«¸ÅÊö
Ê·ÉÏ×îÏêϸµÄÇø¿éÁ´¼¼Êõ¼Ü¹¹·ÖÎö
Ò»ÎĶÁ¶®Çø¿éÁ´ÕûÌå¼Ü¹¹¼°Ó¦Óð¸Àý
Çø¿éÁ´¼¼Êõ¼Ü¹¹
°²È«¼Ü¹¹ÆÀÉóʵս
×îпγÌ
WebÓ¦Óð²È«¼Ü¹¹¡¢ÈëÇÖ¼ì²âÓë·À»¤
ÎïÁªÍø¹Ø¼ü¼¼Êõ¡¢°²È«Óë±ßÔµ¼ÆËã
Çø¿éÁ´°²È«¼¼Êõʵ¼ùÖ¸ÄÏ
ÔÆ·þÎñÓ밲ȫ¼Ü¹¹
»¥ÁªÍø°²È«¿ª·¢·½·¨Óëʵ¼ù
³É¹¦°¸Àý
ÖйúÒøÐÐ ÐÅÏ¢°²È«¼¼Êõ¼°Éî¶È·ÀÓù
±±¾© WebÓ¦Óð²È«¼Ü¹¹¡¢ÈëÇÖ¼ì²âÓë·À»¤
ij²ÆË°ÁìÓòÖªÃûIT·þÎñÉÌ Web°²È«²âÊÔ
ÆÕÈð¿Ë˹ web°²È«Éè¼Æ¡¢²âÊÔÓëÓÅ»¯
±±¾©ºÍÀûʱ ÐÔÄܺͰ²È«ÐÔ²âÊÔ