±à¼ÍƼö: |
ÏÈ´ÓÒ»¸ö·Ç³£»ù´¡µÄÀý×Ó¿ªÊ¼£¬²»Óõ£ÐÄ\Ò»µã¶¼²»Á˽⣬½«Öð²½Á˽⵽¸ü¶àµÄϸ½Ú¡£
±¾ÎÄÀ´×ÔÓÚ Solidity ¹Ù·½ÎĵµÖÐÎİ棬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼¡¢ÍƼö¡£
|
|
Ò»¸ö¼òµ¥µÄÖÇÄܺÏÔ¼
´æ´¢
contract SimpleStorage
{
uint storedData;
function set(uint x) {
storedData = x;
}
function get() constant returns (uint retVal)
{
return storedData;
}
} |
ÔÚSolidityÖУ¬Ò»¸öºÏÔ¼ÓÉÒ»×é´úÂ루ºÏÔ¼µÄº¯Êý£©ºÍÊý¾Ý£¨ºÏÔ¼µÄ״̬£©×é³É¡£ºÏԼλÓÚÒÔÌ«·»Çø¿éÁ´ÉϵÄÒ»¸öÌØÊâµØÖ·¡£uint
storedData; ÕâÐдúÂëÉùÃ÷ÁËÒ»¸ö״̬±äÁ¿£¬±äÁ¿ÃûΪstoredData£¬ÀàÐÍΪ uint
£¨256bitsÎÞ·ûºÅÕûÊý£©¡£Äã¿ÉÒÔÈÏΪËü¾ÍÏñÊý¾Ý¿âÀïÃæµÄÒ»¸ö´æ´¢µ¥Ôª£¬¸ú¹ÜÀíÊý¾Ý¿âÒ»Ñù£¬¿ÉÒÔͨ¹ýµ÷Óú¯Êý²éѯºÍÐÞ¸ÄËü¡£ÔÚÒÔÌ«·»ÖУ¬Í¨³£Ö»ÓкÏÔ¼
µÄÓµÓÐÕß²ÅÄÜÕâÑù×ö¡£ÔÚÕâ¸öÀý×ÓÖУ¬º¯Êý set ºÍ get ·Ö±ðÓÃÓÚÐ޸ĺͲéѯ±äÁ¿µÄÖµ¡£
¸úºÜ¶àÆäËûÓïÑÔÒ»Ñù£¬·ÃÎÊ״̬±äÁ¿Ê±£¬²»ÐèÒªÔÚÇ°ÃæÔö¼Ó this. ÕâÑùµÄǰ׺¡£
Õâ¸öºÏÔ¼»¹ÎÞ·¨×öºÜ¶àÊÂÇ飨ÊÜÏÞÓÚÒÔÌ«·»µÄ»ù´¡ÉèÊ©£©£¬½ö½öÊÇÔÊÐíÈκÎÈË´¢´æÒ»¸öÊý×Ö¡£¶øÇÒÊÀ½çÉÏÈκÎÒ»¸öÈ˶¼¿ÉÒÔÀ´´æÈ¡Õâ¸öÊý×Ö£¬È±ÉÙÒ»¸ö£¨¿É¿¿
µÄ£©·½Ê½À´±£»¤Äã·¢²¼µÄÊý×Ö¡£ÈκÎÈ˶¼¿ÉÒÔµ÷ÓÃset·½·¨ÉèÖÃÒ»¸ö²»Í¬µÄÊý×Ö¸²¸ÇÄã·¢²¼µÄÊý×Ö¡£µ«ÊÇÄãµÄÊý×Ö½«»áÁô´æÔÚÇø¿éÁ´µÄÀúÊ·ÉÏ¡£ÉÔºóÎÒÃÇ»áѧϰÈç
ºÎÔö¼ÓÒ»¸ö´æÈ¡ÏÞÖÆ£¬Ê¹µÃÖ»ÓÐÄã²ÅÄÜÐÞ¸ÄÕâ¸öÊý×Ö¡£
´ú±ÒµÄÀý×Ó
½ÓÏÂÀ´µÄºÏÔ¼½«ÊµÏÖÒ»¸öÐÎʽ×î¼òµ¥µÄ¼ÓÃÜ»õ±Ò¡£¿ÕÖÐÈ¡±Ò²»ÔÙÊÇÒ»¸öħÊõ£¬µ±È»Ö»Óд´½¨ºÏÔ¼µÄÈ˲ÅÄÜ×öÕâ¼þÊÂÇ飨ÏëÓÃÆäËû»õ±Ò·¢ÐÐģʽҲºÜ¼òµ¥£¬Ö»ÊÇʵÏÖϸ½ÚÉϵIJîÒ죩¡£¶øÇÒÈκÎÈ˶¼¿ÉÒÔ·¢ËÍ»õ±Ò¸øÆäËûÈË£¬²»ÐèҪע²áÓû§ÃûºÍÃÜÂ룬ֻҪÓÐÒ»¶ÔÒÔÌ«·»µÄ¹«Ë½Ô¿¼´¿É¡£
×¢Òâ
¶ÔÓÚÔÚÏßsolidity»·¾³À´Ëµ£¬Õâ²»ÊÇÒ»¸öºÃµÄÀý×Ó¡£Èç¹ûÄãʹÓÃÔÚÏßsolidity»·¾³
À´³¢ÊÔÕâ¸öÀý×Ó¡£µ÷Óú¯Êýʱ£¬½«ÎÞ·¨¸Ä±äfromµÄµØÖ·¡£ËùÒÔÄãÖ»ÄܰçÑÝÖý±ÒÕߵĽÇÉ«£¬¿ÉÒÔÖýÔì»õ±Ò²¢·¢Ë͸øÆäËûÈË£¬¶øÎÞ·¨°çÑÝÆäËûÈ˵ĽÇÉ«¡£ÕâµãÔÚÏß
solidity»·¾³½«À´»á×ö¸Ä½ø¡£
contract Coin
{
//¹Ø¼ü×Ö¡°public¡±Ê¹±äÁ¿ÄÜ´ÓºÏÔ¼Íⲿ·ÃÎÊ¡£
address public minter;
mapping (address => uint) public balances;
//ʼþÈÃÇá¿Í»§¶ËÄܸßЧµÄ¶Ô±ä»¯×ö³ö·´Ó¦¡£
event Sent(address from, address to, uint amount);
//Õâ¸ö¹¹Ô캯ÊýµÄ´úÂë½ö½öÖ»ÔÚºÏÔ¼´´½¨µÄʱºò±»ÔËÐС£
function Coin() {
minter = msg.sender;
}
function mint(address receiver, uint amount)
{
if (msg.sender != minter) return;
balances[receiver] += amount;
}
function send(address receiver, uint amount)
{
if (balances[msg.sender] < amount) return;
balances[msg.sender] -= amount;
balances[receiver] += amount;
Sent(msg.sender, receiver, amount);
}
} |
Õâ¸öºÏÔ¼ÒýÈëÁËһЩеĸÅÄÈÃÎÒÃÇÒ»¸öÒ»¸öÀ´¿´Ò»Ï¡£
address public minter ÕâÐдúÂëÉùÃ÷ÁËÒ»¸ö¿É¹«¿ª·ÃÎʵÄ״̬±äÁ¿£¬ÀàÐÍΪaddress¡£addressÀàÐ͵ÄÖµ´óСΪ160
bits£¬²»Ö§³ÖÈκÎËãÊõ²Ù×÷¡£ÊÊÓÃÓÚ´æ´¢ºÏÔ¼µÄµØÖ·»òÆäËûÈ˵Ĺ«Ë½Ô¿¡£public¹Ø¼ü×Ö»á×Ô¶¯ÎªÆäÐÞÊεÄ״̬±äÁ¿Éú³É·ÃÎʺ¯Êý¡£Ã»ÓÐpublic¹Ø¼ü
×ֵıäÁ¿½«ÎÞ·¨±»ÆäËûºÏÔ¼·ÃÎÊ¡£ÁíÍâÖ»Óб¾ºÏÔ¼ÄڵĴúÂë²ÅÄÜдÈë¡£×Ô¶¯Éú³ÉµÄº¯ÊýÈçÏ£º
function minter()
returns (address) { return minter; } |
µ±È»ÎÒÃÇ×Ô¼ºÔö¼ÓÒ»¸öÕâÑùµÄ·ÃÎʺ¯ÊýÊÇÐв»Í¨µÄ¡£±àÒëÆ÷»á±¨´í£¬Ö¸³öÕâ¸öº¯ÊýÓëÒ»¸ö״̬±äÁ¿ÖØÃû¡£
ÏÂÒ»ÐдúÂëmapping (address => uint)
public balances; ´´½¨ÁËÒ»¸öpublicµÄ״̬±äÁ¿£¬µ«ÊÇÆäÀàÐ͸ü¼ÓµÄ¸´ÔÓ¡£¸ÃÀàÐͽ«Ò»Ð©addressÓ³Éäµ½ÎÞ·ûºÅÕûÊý¡£mapping¿ÉÒÔ±»ÈÏΪÊÇÒ»¸ö¹þÏ£±í£¬Ã¿Ò»¸ö¿ÉÄܵÄkey¶ÔÓ¦µÄvalue±»ÐéÄâµÄ³õʼ»¯ÎªÈ«0.Õâ¸öÀà±È²»ÊǺÜÑϽ÷£¬¶ÔÓÚÒ»¸ömapping£¬ÎÞ·¨»ñȡһ¸ö°üº¬ÆäËùÓÐkey»òÕßvalue
µÄÁ´±í¡£ËùÒÔÎÒÃǵÃ×Ô¼º¼Ç×ÅÌí¼ÓÁËÄÄЩ¶«Î÷µ½mappingÖС£¸üºÃµÄ·½Ê½ÊÇά»¤Ò»¸öÕâÑùµÄÁ´±í£¬»òÕßʹÓÃÆäËû¸ü¸ß¼¶µÄÊý¾ÝÀàÐÍ¡£»òÕßÖ»ÔÚ²»ÊÜÕâ¸öȱÏÝÓ°
ÏìµÄ³¡¾°ÖÐʹÓÃmapping£¬¾ÍÏñÕâ¸öÀý×Ó¡£ÔÚÕâ¸öÀý×ÓÖÐÓÉpublic¹Ø¼ü×ÖÉú³ÉµÄ·ÃÎʺ¯Êý½«»á¸ü¼Ó¸´ÔÓ£¬Æä´úÂë´óÖÂÈçÏ£º
function balances(address
_account) returns (uint balance) {
return balances[_account];
} |
ÎÒÃÇ¿ÉÒԺܷ½±ãµÄͨ¹ýÕâ¸öº¯Êý²éѯij¸öÌØ¶¨Õ˺ŵÄÓà¶î¡£
event Sent(address from, address to,
uint value)ÕâÐдúÂëÉùÃ÷ÁËÒ» ¸ö¡°Ê¼þ¡±¡£ÓÉsendº¯ÊýµÄ×îºóÒ»ÐдúÂë´¥·¢¡£¿Í»§¶Ë£¨·þÎñ¶ËÓ¦ÓÃÒ²ÊÊÓã©¿ÉÒÔÒԺܵ͵ĿªÏúÀ´¼àÌýÕâЩÓÉÇø¿éÁ´´¥·¢µÄʼþ¡£Ê¼þ´¥·¢Ê±£¬¼àÌýÕß»áͬʱ½Ó
ÊÕµ½from£¬to£¬valueÕâЩ²ÎÊýÖµ£¬¿ÉÒÔ·½±ãµÄÓÃÓÚ¸ú×Ù½»Òס£ÎªÁ˼àÌýÕâ¸öʼþ£¬Äã¿ÉÒÔʹÓÃÈçÏ´úÂ룺
Coin.Sent().watch({},
'', function(error, result) {
if (!error) {
console.log("Coin transfer: " + result.args.amount
+
" coins were sent from " + result.args.from
+
" to " + result.args.to + ".");
console.log("Balances now:\n" +
"Sender: " + Coin.balances.call(result.args.from)
+
"Receiver: " + Coin.balances.call(result.args.to));
}
} |
×¢ÒâÔÚ¿Í»§¶ËÖÐÊÇÈçºÎµ÷ÓÃ×Ô¶¯Éú³ÉµÄ balances º¯ÊýµÄ¡£
ÕâÀïÓиö±È½ÏÌØÊâµÄº¯Êý Coin¡£ËüÊÇÒ»¸ö¹¹Ô캯Êý£¬»áÔÚºÏÔ¼´´½¨µÄʱºòÔËÐУ¬Ö®ºó¾ÍÎÞ·¨±»µ÷Óá£Ëü»áÓÀ¾ÃµÃ´æ´¢ºÏÔ¼´´½¨ÕߵĵØÖ·¡£msg£¨ÒÔ¼°txºÍblock£©ÊÇÒ»¸öÉñÆæµÄ
È«¾Ö±äÁ¿£¬Ëü°üº¬ÁËһЩ¿ÉÒÔ±»ºÏÔ¼´úÂë·ÃÎʵÄÊôÓÚÇø¿éÁ´µÄÊôÐÔ¡£msg.sender ×ÜÊÇ´æ·Å×ŵ±Ç°º¯ÊýµÄÍⲿµ÷ÓÃÕߵĵØÖ·¡£
×îºó£¬ÕæÕý±»Óû§»òÕ߯äËûºÏÔ¼µ÷Óã¬ÓÃÀ´Íê³É±¾ºÏÔ¼¹¦Äܵĺ¯ÊýÊÇmintºÍsend¡£Èç¹ûºÏÔ¼´´½¨ÕßÖ®ÍâµÄÆäËûÈ˵÷ÓÃmint£¬Ê²Ã´¶¼²»»á·¢Éú¡£¶ø
send¿ÉÒÔ±»ÈκÎÈË£¨ÓµÓÐÒ»¶¨ÊýÁ¿µÄ´ú±Ò£©µ÷Ó㬷¢ËÍһЩ±Ò¸øÆäËûÈË¡£×¢Ò⣬µ±Äãͨ¹ý¸ÃºÏÔ¼·¢ËÍһЩ´ú±Òµ½Ä³¸öµØÖ·£¬ÔÚÇø¿éÁ´ä¯ÀÀÆ÷Öвéѯ¸ÃµØÖ·½«Ê²Ã´
Ò²¿´²»µ½¡£ÒòΪ·¢ËÍ´ú±Òµ¼ÖµÄÓà¶î±ä»¯Ö»´æ´¢Ôڸôú±ÒºÏÔ¼µÄÊý¾Ý´æ´¢ÖС£Í¨¹ýʼþÎÒÃÇ¿ÉÒÔºÜÈÝÒ×´´½¨Ò»¸ö¿ÉÒÔ×·×ÙÄãµÄбҽ»Ò׺ÍÓà¶îµÄ¡°Çø¿éÁ´ä¯ÀÀÆ÷¡±¡£
Çø¿éÁ´»ù´¡
¶ÔÓÚ³ÌÐòÔ±À´Ëµ£¬Çø¿éÁ´Õâ¸ö¸ÅÄîÆäʵ²»ÄÑÀí½â¡£ÒòΪ×îÄѶ®µÄһЩ¶«Î÷£¨Íڿ󣬹þÏ££¬ÍÖÔ²ÇúÏß¼ÓÃÜ£¬µã¶ÔµãÍøÂçµÈµÈ£©Ö»ÊÇΪÁËÌṩһϵÁеÄÌØÐԺͱ£
ÕÏ¡£ÄãÖ»ÐèÒª½ÓÊÜÕâЩ¼ÈÓеÄÌØÐÔ£¬²»ÐèÒª¹ØÐÄÆäµ×²ãµÄ¼¼Êõ¡£¾ÍÏñÄãÈç¹û½ö½öÊÇΪÁËʹÓÃÑÇÂíÑ·µÄAWS£¬²¢²»ÐèÒªÁ˽âÆäÄÚ²¿¹¤×÷ÔÀí¡£
½»Ò×/ÊÂÎñ
Çø¿éÁ´ÊÇÒ»¸öÈ«¾Ö¹²ÏíµÄ£¬ÊÂÎñÐÔµÄÊý¾Ý¿â¡£ÕâÒâζ×ŲÎÓëÕâ¸öÍøÂçµÄÿһ¸öÈ˶¼¿ÉÒÔ¶ÁÈ¡ÆäÖеļǼ¡£Èç¹ûÄãÏëÐÞ¸ÄÕâ¸öÊý¾Ý¿âÖеĶ«Î÷£¬¾Í±ØÐë´´½¨Ò»¸ö
ÊÂÎñ£¬²¢µÃµ½ÆäËûËùÓÐÈ˵ÄÈ·ÈÏ¡£ÊÂÎñÕâ¸ö´ÊÒâζ×ÅÄãÒª×öµÄÐ޸썼ÙÈçÄãÏëͬʱÐÞ¸ÄÁ½¸öÖµ£©Ö»Äܱ»ÍêÍêȫȫµÄʵʩ»òÕßÒ»µã¶¼Ã»ÓнøÐС£
´ËÍ⣬µ±ÄãµÄÊÂÎñ±»Ó¦Óõ½Õâ¸öÊý¾Ý¿âµÄʱºò£¬ÆäËûÊÂÎñ²»ÄÜÐ޸ĸÃÊý¾Ý¿â¡£
¾Ù¸öÀý×Ó£¬ÏëÏóÒ»ÕÅ±í£¬ÀïÃæÁгöÁËij¸öµç×Ó»õ±ÒËùÓÐÕ˺ŵÄÓà¶î¡£µ±´ÓÒ»¸öÕË»§µ½ÁíÍâÒ»¸öÕË»§µÄתÕËÇëÇó·¢Éúʱ£¬Õâ¸öÊý¾Ý¿âµÄÊÂÎñÌØÐÔÈ·±£´ÓÒ»¸öÕË»§ÖмõµôµÄ½ð¶î»á±»¼Óµ½ÁíÒ»¸öÕË»§ÉÏ¡£Èç¹ûÒòΪijÖÖÔÒò£¬ÍùÄ¿±êÕË»§ÉÏÔö¼Ó½ð¶îÎÞ·¨½øÐУ¬ÄÇôԴÕË»§µÄ½ð¶îÒ²²»»á·¢ÉúÈκα仯¡£
´ËÍ⣬һ¸öÊÂÎñ»á±»·¢ËÍÕߣ¨´´½¨Õߣ©½øÐÐÃÜÂëѧǩÃû¡£ÕâÏî´ëÊ©·Ç³£Ö±¹ÛµÄΪÊý¾Ý¿âµÄÌØ¶¨ÐÞ¸ÄÔö¼ÓÁË·ÃÎʱ£»¤¡£ÔÚµç×Ó»õ±ÒµÄÀý×ÓÖУ¬Ò»¸ö¼òµ¥µÄ¼ì²é¾Í¿ÉÒÔÈ·±£Ö»ÓгÖÓÐÕË»§ÃÜÔ¿µÄÈË£¬²ÅÄÜ´Ó¸ÃÕË»§ÏòÍâתÕË¡£
Çø¿é
Çø¿éÁ´Òª½â¾öµÄÒ»¸öÖ÷ÒªÄÑÌ⣬ÔÚ±ÈÌØ±ÒÖб»³ÆÎª¡°Ë«»¨¹¥»÷¡±¡£µ±ÍøÂçÉϳöÏÖÁËÁ½±Ê½»Ò×£¬¶¼Òª»¨¹âÒ»¸öÕË»§ÖеÄǮʱ£¬»á·¢Éúʲô£¿Ò»¸ö³åÍ»£¿
¼òµ¥µÄ»Ø´ðÊÇÄã²»ÐèÒª¹ØÐÄÕâ¸öÎÊÌâ¡£ÕâЩ½»Ò׻ᱻÅÅÐò²¢´ò°ü³É¡°Çø¿é¡±£¬È»ºó±»ËùÓвÎÓëµÄ½ÚµãÖ´Ðкͷַ¢¡£Èç¹ûÁ½±Ê½»Ò×Ï໥³åÍ»£¬ÅÅÐò¿¿ºóµÄ½»Ò׻ᱻ¾Ü¾ø²¢ÌÞ³ý³öÇø¿é¡£
ÕâÐ©Çø¿é°´Ê±¼äÅųÉÒ»¸öÏßÐÔÐòÁС£ÕâÒ²ÕýÊÇ¡°Çø¿éÁ´¡±Õâ¸ö´ÊµÄÓÉÀ´¡£Çø¿éÒÔÒ»¸öÏ൱¹æÂɵÄʱ¼ä¼ä¸ô¼ÓÈëµ½Á´ÉÏ¡£¶ÔÓÚÒÔÌ«·»£¬Õâ¸ö¼ä¸ô´óÖÂÊÇ17Ãë¡£
×÷Ϊ¡°Ë³ÐòÑ¡Ôñ»úÖÆ¡±£¨Í¨³£³ÆÎª¡°ÍÚ¿ó¡±£©µÄÒ»²¿·Ö£¬Ò»¶ÎÇø¿éÁ´¿ÉÄÜ»áʱ²»Ê±±»»Ø¹ö¡£µ«ÕâÖÖÇé¿öÖ»»á·¢ÉúÔÚÕûÌõÁ´µÄÄ©¶Ë¡£»Ø¹öÉæ¼°µÄÇø¿éÔ½¶à£¬Æä·¢ÉúµÄ¸ÅÂÊԽС¡£ËùÒÔÄãµÄ½»Ò׿ÉÄܻᱻ»Ø¹ö£¬ÉõÖÁ»á±»´ÓÇø¿éÁ´ÖÐɾ³ý¡£µ«ÊÇÄãµÈ´ýµÄÔ½¾Ã£¬ÕâÖÖÇé¿ö·¢ÉúµÄ¸ÅÂʾÍԽС¡£
Ì«·»ÐéÄâ»ú
×ÜÀÀ
ÒÔÌ«·»ÐéÄâ»ú£¨EVM£©ÊÇÒÔÌ«·»ÖÐÖÇÄܺÏÔ¼µÄÔËÐл·¾³¡£Ëü²»½ö±»É³Ïä·â×°ÆðÀ´£¬ÊÂʵÉÏËü±»ÍêÈ«¸ôÀ룬Ҳ¾ÍÊÇ˵ÔËÐÐÔÚEVMÄÚ²¿µÄ´úÂë²»ÄܽӴ¥µ½ÍøÂç¡¢Îļþϵͳ»òÕ߯äËü½ø³Ì¡£ÉõÖÁÖÇÄܺÏÔ¼ÓëÆäËüÖÇÄܺÏÔ¼Ö»ÓÐÓÐÏ޵ĽӴ¥¡£
ÕË»§
ÒÔÌ«·»ÖÐÓÐÁ½ÀàÕË»§£¬ËüÃǹ²ÓÃͬһ¸öµØÖ·¿Õ¼ä¡£ÍⲿÕË»§£¬¸ÃÀàÕË»§±»¹«Ô¿-˽Կ¶Ô¿ØÖÆ£¨ÈËÀࣩ¡£ºÏÔ¼ÕË»§£¬¸ÃÀàÕË»§±»´æ´¢ÔÚÕË»§ÖеĴúÂë¿ØÖÆ¡£
ÍⲿÕË»§µÄµØÖ·ÊÇÓɹ«Ô¿¾ö¶¨µÄ£¬ºÏÔ¼ÕË»§µÄµØÖ·ÊÇÔÚ´´½¨¸ÄºÏԼʱȷ¶¨µÄ£¨Õâ¸öµØÖ·ÓɺÏÔ¼´´½¨ÕߵĵØÖ·ºÍ¸ÃµØÖ··¢³ö¹ýµÄ½»Ò×ÊýÁ¿¼ÆËãµÃµ½£¬µØÖ··¢³ö¹ýµÄ½»Ò×ÊýÁ¿Ò²±»³Æ×÷"nonce"£©
ºÏÔ¼ÕË»§´æ´¢ÁË´úÂ룬ÍⲿÕË»§ÔòûÓУ¬³ýÁËÕâµãÒÔÍ⣬ÕâÁ½ÀàÕË»§¶ÔÓÚEVMÀ´ËµÊÇÒ»ÑùµÄ¡£
ÿ¸öÕË»§ÓÐÒ»¸ökey-valueÐÎʽµÄ³Ö¾Ã»¯´æ´¢¡£ÆäÖÐkeyºÍvalueµÄ³¤¶È¶¼ÊÇ256bit£¬Ãû×Ö½Ð×östorage.
ÁíÍ⣬ÿ¸öÕË»§¶¼ÓÐÒ»¸öÒÔÌ«±ÒÓà¶î£¨µ¥Î»ÊÇ¡°Wei"£©£¬¸ÃÕË»§Óà¶î¿ÉÒÔͨ¹ýÏòËü·¢ËÍ´øÓÐÒÔÌ«±ÒµÄ½»Ò×À´¸Ä±ä¡£
½»Ò×
Ò»±Ê½»Ò×ÊÇÒ»ÌõÏûÏ¢£¬´ÓÒ»¸öÕË»§·¢Ë͵½ÁíÒ»¸öÕË»§£¨¿ÉÄÜÊÇÏàͬµÄÕË»§»òÕßÁãÕË»§£¬¼ûÏÂÎÄ£©¡£½»Ò׿ÉÒÔ°üº¬¶þ½øÖÆÊý¾Ý£¨payload£©ºÍÒÔÌ«±Ò¡£
Èç¹ûÄ¿±êÕË»§°üº¬´úÂ룬¸Ã´úÂë»áÖ´ÐУ¬payload¾ÍÊÇÊäÈëÊý¾Ý¡£
Èç¹ûÄ¿±êÕË»§ÊÇÁãÕË»§£¨ÕË»§µØÖ·ÊÇ0£©£¬½»Ò×½«´´½¨Ò»¸öкÏÔ¼¡£ÕýÈçÉÏÎÄËù½²£¬Õâ¸öºÏÔ¼µØÖ·²»ÊÇÁãµØÖ·£¬¶øÊÇÓɺÏÔ¼´´½¨ÕߵĵØÖ·ºÍ¸ÃµØÖ··¢³ö¹ýµÄ½»
Ò×ÊýÁ¿£¨±»³ÆÎªnonce£©¼ÆËãµÃµ½¡£´´½¨ºÏÔ¼½»Ò×µÄpayload±»µ±×÷EVM×Ö½ÚÂëÖ´ÐС£Ö´ÐеÄÊä³ö×öΪºÏÔ¼´úÂë±»ÓÀ¾Ã´æ´¢¡£ÕâÒâζ×Å£¬ÎªÁË´´½¨Ò»¸ö
ºÏÔ¼£¬Äã²»ÐèÒªÏòºÏÔ¼·¢ËÍÕæÕýµÄºÏÔ¼´úÂ룬¶øÊÇ·¢ËÍÄܹ»·µ»ØÕæÕý´úÂëµÄ´úÂë¡£
Gas
ÒÔÌ«·»ÉϵÄÿ±Ê½»Ò×¶¼»á±»ÊÕȡһ¶¨ÊýÁ¿µÄgas£¬gasµÄÄ¿µÄÊÇÏÞÖÆÖ´Ðн»Ò×ËùÐèµÄ¹¤×÷Á¿£¬Í¬Ê±ÎªÖ´ÐÐÖ§¸¶·ÑÓᣵ±EVMÖ´Ðн»Ò×ʱ£¬gas½«°´ÕÕÌØ¶¨¹æÔò±»Öð½¥ÏûºÄ¡£
gas price£¨gas¼Û¸ñ£¬ÒÔÌ«±Ò¼Æ£©ÊÇÓɽ»Ò×´´½¨ÕßÉèÖõ쬷¢ËÍÕË»§ÐèÒªÔ¤¸¶µÄ½»Ò×·ÑÓà = gas
price * gas amount¡£ Èç¹ûÖ´ÐнáÊø»¹ÓÐgasÊ£Ó࣬ÕâЩgas½«±»·µ»¹¸ø·¢ËÍÕË»§¡£
ÎÞÂÛÖ´Ðе½Ê²Ã´Î»Öã¬Ò»µ©gas±»ºÄ¾¡£¨±ÈÈ罵Ϊ¸ºÖµ£©£¬½«»á´¥·¢Ò»¸öout-of-gasÒì³£¡£µ±Ç°µ÷ÓÃÖ¡Ëù×öµÄËùÓÐ״̬Ð޸ͼ½«±»»Ø¹ö¡£
´æ´¢£¬Ö÷´æºÍÕ»
ÿ¸öÕË»§ÓÐÒ»¿é³Ö¾Ã»¯ÄÚ´æÇøÓò±»³ÆÎª´æ´¢¡£ÆäÐÎʽΪkey-value£¬keyºÍvalueµÄ³¤¶È¾ùΪ256±ÈÌØ¡£ÔÚºÏÔ¼À²»ÄܱéÀúÕË»§µÄ´æ´¢¡£Ïà¶ÔÓÚÁíÍâÁ½ÖÖ£¬´æ´¢µÄ¶Á²Ù×÷Ïà¶ÔÀ´Ëµ¿ªÏú½Ï´ó£¬Ð޸Ĵ洢¸üÉõ¡£Ò»¸öºÏÔ¼Ö»ÄܶÔËü×Ô¼ºµÄ´æ´¢½øÐжÁд¡£
µÚ¶þ¸öÄÚ´æÇø±»³ÆÎªÖ÷´æ¡£ºÏÔ¼Ö´ÐÐÿ´ÎÏûÏ¢µ÷ÓÃʱ£¬¶¼ÓÐÒ»¿éÐµģ¬±»Çå³ý¹ýµÄÖ÷´æ¡£Ö÷´æ¿ÉÒÔÒÔ×Ö½ÚÁ£¶ÈѰַ£¬µ«ÊǶÁдÁ£¶ÈΪ32×Ö½Ú£¨256±ÈÌØ£©¡£²Ù×÷Ö÷´æµÄ¿ªÏúËæ×ÅÆäÔö³¤¶ø±ä´ó£¨Æ½·½¼¶±ð£©¡£
EVM²»ÊÇ»ùÓڼĴæÆ÷£¬¶øÊÇ»ùÓÚÕ»µÄÐéÄâ»ú¡£Òò´ËËùÓеļÆËã¶¼ÔÚÒ»¸ö±»³ÆÎªÕ»µÄÇøÓòÖ´ÐС£Õ»×î´óÓÐ1024¸öÔªËØ£¬Ã¿¸öÔªËØ256±ÈÌØ¡£¶ÔÕ»µÄ·ÃÎÊ
Ö»ÏÞÓÚÆä¶¥¶Ë£¬·½Ê½Îª£ºÔÊÐí¿½±´×î¶¥¶ËµÄ16¸öÔªËØÖеÄÒ»¸öµ½Õ»¶¥£¬»òÕßÊǽ»»»Õ»¶¥ÔªËغÍÏÂÃæ16¸öÔªËØÖеÄÒ»¸ö¡£ËùÓÐÆäËû²Ù×÷¶¼Ö»ÄÜÈ¡×î¶¥µÄÁ½¸ö£¨»òÒ»
¸ö£¬»ò¸ü¶à£¬È¡¾öÓÚ¾ßÌåµÄ²Ù×÷£©ÔªËØ£¬²¢°Ñ½á¹ûѹÔÚÕ»¶¥¡£µ±È»¿ÉÒÔ°ÑÕ»ÉϵÄÔªËØ·Åµ½´æ´¢»òÕßÖ÷´æÖС£µ«ÊÇÎÞ·¨Ö»·ÃÎÊÕ»ÉÏÖ¸¶¨Éî¶ÈµÄÄǸöÔªËØ£¬ÔÚÄÇ֮ǰ±ØÐë
Òª°ÑÖ¸¶¨Éî¶ÈÖ®ÉϵÄËùÓÐÔªËØ¶¼´ÓÕ»ÖÐÒÆ³ý²ÅÐС£
Ö¸Á
EVMµÄÖ¸Á±»¿ÌÒâ±£³ÖÔÚ×îС¹æÄ££¬ÒÔ¾¡¿ÉÄܱÜÃâ¿ÉÄܵ¼Ö¹²Ê¶ÎÊÌâµÄ´íÎóʵÏÖ¡£ËùÓеÄÖ¸Áî¶¼ÊÇÕë¶Ô256±ÈÌØÕâ¸ö»ù±¾µÄÊý¾ÝÀàÐ͵IJÙ×÷¡£¾ß±¸³£ÓõÄËãÊõ£¬Î»£¬Âß¼ºÍ±È½Ï²Ù×÷¡£Ò²¿ÉÒÔ×öµ½Ìõ¼þºÍÎÞÌõ¼þÌø×ª¡£´ËÍ⣬ºÏÔ¼¿ÉÒÔ·ÃÎʵ±Ç°Çø¿éµÄÏà¹ØÊôÐÔ£¬±ÈÈçËüµÄ±àºÅºÍʱ¼ä´Á¡£
ÏûÏ¢µ÷ÓÃ
ºÏÔ¼¿ÉÒÔͨ¹ýÏûÏ¢µ÷Óõķ½Ê½À´µ÷ÓÃÆäËüºÏÔ¼»òÕß·¢ËÍÒÔÌ«±Òµ½·ÇºÏÔ¼ÕË»§¡£ÏûÏ¢µ÷Óúͽ»Ò׷dz£ÀàËÆ£¬ËüÃǶ¼ÓÐÒ»¸öÔ´£¬Ò»¸öÄ¿±ê£¬Êý¾Ý¸ºÔØ£¬ÒÔÌ«±Ò£¬gasºÍ·µ»ØÊý¾Ý¡£ÊÂʵÉÏÿ¸ö½»Ò×¶¼¿ÉÒÔ±»ÈÏΪÊÇÒ»¸ö¶¥²ãÏûÏ¢µ÷Óã¬Õâ¸öÏûÏ¢µ÷ÓûáÒÀ´Î²úÉú¸ü¶àµÄÏûÏ¢µ÷Óá£
Ò»¸öºÏÔ¼¿ÉÒÔ¾ö¶¨Ê£ÓàgasµÄ·ÖÅä¡£±ÈÈçÄÚ²¿ÏûÏ¢µ÷ÓÃʱʹÓöàÉÙgas£¬»òÕ߯ÚÍû±£Áô¶àÉÙgas¡£Èç¹ûÔÚÄÚ²¿ÏûÏ¢µ÷ÓÃʱ·¢ÉúÁËout-of-gas
Òì³££¨»òÕ߯äËûÒì³££©£¬ºÏÔ¼½«»áµÃµ½Í¨Öª£¬Ò»¸ö´íÎóÂ뱻ѹÔÚÕ»ÉÏ¡£ÕâÖÖÇé¿öÖ»ÊÇÄÚ²¿ÏûÏ¢µ÷ÓõÄgasºÄ¾¡¡£ÔÚsolidityÖУ¬ÕâÖÖÇé¿öÏ·¢Æðµ÷ÓõĺÏ
ԼĬÈϻᴥ·¢Ò»¸öÈ˹¤Òì³£¡£Õâ¸öÒì³£»á´òÓ¡³öµ÷ÓÃÕ»¡£
¾ÍÏñ֮ǰ˵¹ýµÄ£¬±»µ÷ÓõĺÏÔ¼£¨·¢Æðµ÷ÓõĺÏÔ¼Ò²Ò»Ñù£©»áÓµÓÐոеÄÖ÷´æ²¢Äܹ»·ÃÎʵ÷ÓõĸºÔØ¡£µ÷ÓøºÔر»´æ´¢ÔÚÒ»¸öµ¥¶ÀµÄ±»³ÆÎªcalldataµÄÇøÓò¡£µ÷ÓÃÖ´ÐнáÊøºó£¬·µ»ØÊý¾Ý½«±»´æ·ÅÔÚµ÷Ó÷½Ô¤ÏÈ·ÖÅäºÃµÄÒ»¿éÄÚ´æÖС£
µ÷ÓòãÊý±»ÏÞÖÆÎª1024£¬Òò´Ë¶ÔÓÚ¸ü¼Ó¸´ÔӵIJÙ×÷£¬ÎÒÃÇÓ¦¸ÃʹÓÃÑ»·¶ø²»Êǵݹ顣
´úÂëµ÷ÓúͿâ
´æÔÚÒ»ÖÖÌØÊâÀàÐ͵ÄÏûÏ¢µ÷Ó㬱»³ÆÎªcallcode¡£Ëü¸úÏûÏ¢µ÷Óü¸ºõÍêȫһÑù£¬Ö»ÊǼÓÔØ×ÔÄ¿±êµØÖ·µÄ´úÂ뽫ÔÚ·¢Æðµ÷ÓõĺÏÔ¼ÉÏÏÂÎÄÖÐÔËÐС£
ÕâÒâζ×ÅÒ»¸öºÏÔ¼¿ÉÒÔÔÚÔËÐÐʱ´ÓÁíÍâÒ»¸öµØÖ·¶¯Ì¬¼ÓÔØ´úÂë¡£´æ´¢£¬µ±Ç°µØÖ·ºÍÓà¶î¶¼Ö¸Ïò·¢Æðµ÷ÓõĺÏÔ¼£¬Ö»ÓдúÂëÊÇ´Ó±»µ÷ÓõØÖ·»ñÈ¡µÄ¡£
ÕâʹµÃSolidity¿ÉÒÔʵÏÖ¡±¿â¡°¡£¿É¸´ÓõĿâ´úÂë¿ÉÒÔÓ¦ÓÃÔÚÒ»¸öºÏÔ¼µÄ´æ´¢ÉÏ£¬¿ÉÒÔÓÃÀ´ÊµÏÖ¸´ÔÓµÄÊý¾Ý½á¹¹¡£
ÈÕÖ¾
ÔÚÇø¿é²ãÃæ£¬¿ÉÒÔÓÃÒ»ÖÖÌØÊâµÄ¿ÉË÷ÒýµÄÊý¾Ý½á¹¹À´´æ´¢Êý¾Ý¡£Õâ¸öÌØÐÔ±»³ÆÎªÈÕÖ¾£¬SolidityÓÃËüÀ´ÊµÏÖʼþ¡£ºÏÔ¼´´½¨Ö®ºó¾ÍÎÞ·¨·ÃÎÊÈÕÖ¾Êý
¾Ý£¬µ«ÊÇÕâЩÊý¾Ý¿ÉÒÔ´ÓÇø¿éÁ´Íâ¸ßЧµÄ·ÃÎÊ¡£ÒòΪ²¿·ÖÈÕÖ¾Êý¾Ý±»´æ´¢ÔÚ²¼Â¡¹ýÂËÆ÷£¨Bloom filter)
ÖУ¬ÎÒÃÇ¿ÉÒÔ¸ßЧ²¢ÇÒ°²È«µÄËÑË÷ÈÕÖ¾£¬ËùÒÔÄÇЩûÓÐÏÂÔØÕû¸öÇø¿éÁ´µÄÍøÂç½Úµã£¨Çá¿Í»§¶Ë£©Ò²¿ÉÒÔÕÒµ½ÕâЩÈÕÖ¾¡£
´´½¨
ºÏÔ¼ÉõÖÁ¿ÉÒÔͨ¹ýÒ»¸öÌØÊâµÄÖ¸ÁîÀ´´´½¨ÆäËûºÏÔ¼£¨²»ÊǼòµ¥µÄÏòÁãµØÖ··¢Æðµ÷Óã©¡£´´½¨ºÏÔ¼µÄµ÷ÓøúÆÕͨµÄÏûÏ¢µ÷ÓõÄÇø±ðÔÚÓÚ£¬¸ºÔØÊý¾ÝÖ´ÐеĽá¹û±»µ±×÷´úÂ룬µ÷ÓÃÕß/´´½¨ÕßÔÚÕ»Éϵõ½ÐºÏÔ¼µÄµØÖ·¡£
×Ô»Ù
Ö»ÓÐÔÚij¸öµØÖ·ÉϵĺÏÔ¼Ö´ÐÐ×Ô»Ù²Ù×÷ʱ£¬ºÏÔ¼´úÂë²Å»á´ÓÇø¿éÁ´ÉÏÒÆ³ý¡£ºÏÔ¼µØÖ·ÉÏÊ£ÓàµÄÒÔÌ«±Ò»á·¢Ë͸øÖ¸¶¨µÄÄ¿±ê£¬È»ºóÆä´æ´¢ºÍ´úÂë±»ÒÆ³ý¡£
×¢Ò⣬¼´Ê¹Ò»¸öºÏÔ¼µÄ´úÂë²»°üº¬×Ô»ÙÖ¸ÁÒÀÈ»¿ÉÒÔͨ¹ý´úÂëµ÷ÓÃ(callcode)À´Ö´ÐÐÕâ¸ö²Ù×÷¡£ |