GA»Æ½ð¼×ADLab£ºÒÔÌ«·»ÖÇÄܺÏÔ¼¶à¸ö¹¥»÷°¸Àý·ÖÎö
°ä²¼¹¦·ò 2018-08-25Ò»¡¢Ê¹ÓÃOraclize·þÎñµÄºöÂÔ
ΪÁ˽«Çø¿éÁ´¼¼ÊõÀûÓõ½ÏßÏ£¬ÀýÈ罫·É»úÑÓÎóÏÕ¡¢Êý×ÖÇ®±Ò¶Ò»»µÈÒµÎñÉÏÁ´£¬Çø¿éÁ´±ØÒªÓµÓнӼûÁ´±íÊý¾ÝµÄÄÜÁ¦¡£µ«ÊÇÈôÊÇÖÇÄܺÏÔ¼Ö±½Ó´Ó±í²¿·þÎñ»ñÈ¡Êý¾Ý£¬ÓÉÓÚÍøÂçÑÓ³¤£¬½Úµã´¦ÖÿìÂʵȸ÷ÀàÔÒò£¬»áµ¼ÖÂÿ¸ö½áµã»ñÈ¡µÄÊý¾Ý·ÖÆç£¬Ê¹Çø¿éÁ´µÄ¹²Ê¶»úÔìʧЧ¡£
ÏÖÓеĽâ¾ö¹æ»®ÊÇʹÓõÚÈý·½·¢ËÍÇø¿éÁ´µÄÂòÂô£¬ÂòÂô»áͬ²½µ½Ã¿¸ö½Úµã£¬´Ó¶ø±£ÕÏÊý¾ÝµÄÒ»ÖÂÐÔ¡£OraclizeÊÇÒ»¸öÔ¤ÑÔ»ú£¬ÎªÒÔÌ«·»µÈÇø¿éÁ´ÌṩÊý¾Ý·þÎñ£¬Ëü¶ÀÁ¢ÓÚÇø¿éÁ´ÏµÍ³Ö®±í£¬ÊÇÒ»¸öÖÐÐÄ»¯µÄµÚÈý·½¡£OraclizeÄܹ»ÌṩµÄÊý¾Ý½Ó¼û·þÎñÔ̺¬Ëæ»úÊý¡¢URL½Ó¼û¡¢IPFSµÈ¡£OraclizeµÄ¼Ü¹¹ÈçͼËùʾ£º
Oraclize²»ÊÇÁ´ÉÏÖ±½ÓÄܹ»Å²Óõĺ¯Êý£¬¶øÊÇÒ»¸öÁ´±íµÄʵÌ塣ΪÁËץȡ±í²¿Êý¾Ý£¬ÒÔÌ«·»ÖÇÄܺÏÔ¼±ØÒª·¢ËÍÒ»¸ö²éÎÊÒªÇó¸øOraclize£¬µ±Oraclize¼àÌýµ½Á´ÉÏÓÐÓйØÒªÇóʱ£¬µ±¼´¶Ô»¥ÁªÍøÉϵÄ×ÊÔ´ÌáÒé½Ó¼û£¬¶øºóŲÓúÏÔ¼ÖеĻص÷º¯Êý__callback½«²éÎÊÁ˾ַµ»ØÇø¿éÁ´¡£
ÀýÈ磬ÓÃÃÀÔª¶Ò»»ÒÔÌ«±ÒµÄÖÇÄܺÏÔ¼µÄÊý¾Ý²éÎÊÓï¾äÈçÏ£º
¼àÌýµ½ÒªÇóºó£¬Oraclize»á½Ó¼ûURL»ñµÃ²éÎÊÁ˾֣¬¶øºóŲÓÃ__callbackµÄº¯Êý£¬Oraclize·µ»ØµÄÊý¾Ýͨ¹ý__callbackº¯Êý²ÎÊý´«»ØÖÇÄܺÏÔ¼¡£ÉÏͼÖк¯ÊýŲÓõIJÎÊý[3]Öеġ°3334312e3533¡±¼´ÎªÆäʱµÄ»ãÂÊ£º1ETH = $341.53£¬ËæºóÖÇÄܺÏÔ¼»áƾ¾ÝÕâ¸ö²éÎÊÁ˾ֽøÐкóÐøµÄÂß¼´¦Öá£
1¡¢¹¥»÷°¸Àý£ºSIGMA (0x03AF37073258B08FfFF303e9E07E8a0B7bfc4fd9)
SIGMAºÏԼʹÓÃÁËOraclize·þÎñ²éÎÊ»ãÂÊ¡£¸ÃºÏÔ¼µÄ__callback»Øµ÷º¯ÊýÈçÏ£º
ÓÉÓÚ__callbackº¯ÊýÖдæÔÚÕûÊýÒç³ö£¬µ¼ÖÂownerµÄ´ú±ÒÓà¶î±»ÏÂÒç³ÉÒ»¸öºÜ´óµÄÖµ£¬µ¼Ö´ú±ÒÔö·¢¡£´Ó´ú±Ò·Ý¶îÅÅÃûÄܹ»¿´³ö¹¥»÷ÕßµÄÕË»§µØÖ·Îª0x2ef045a75b967054791c23ab93fbc52cc0a35c80£¬¶ø¸ÃµØÖ·²¢²»ÊÇ´´½¨ºÏÔ¼µÄÕË»§µØÖ·(0xC7e92D8997359863a8F15FE87C0812D7A3a8F770)¡£
¸ú×ÙTransactions£¬·¢ÏÖ0xC7e92D8997359863a8F15FE87C0812D7A3a8F770µ÷transfer_ownership½«ºÏÔ¼µÄownerÉèÖÃΪ0x2ef045a75b967054791c23ab93fbc52cc0a35c80¡£
Õë¶ÔÕâ¸ö·ì϶ÊÇ·ñʹÓÃSafeMath¾ÍÄܹ»½â¾öÁËÄØ£¿´ð°¸ÊÇ·ñ¶¨µÄ¡£ÔÚOraclizeŲÓÃ__callback֮ǰ£¬ÓÐЧ»§¶Ô²éÎʺ¯ÊýµÄŲÓ㬲¢ÇÒÕâ¸öŲÓÃÆÆ·ÑÒÔÌ«±Ò¡£
ʹÓÃSafeMathµÄÇé¿öÏ£¬²úÉúÒç³öµÄÊÂÎñ»á»Ø¹ö£¬µ«±¾ÀýÖпÉÄܻعöµÄÖ»ÓÐOraclize¶Ô__callbackº¯ÊýŲÓõÄÊÂÎñ£¬¶øÖ®Ç°Óû§ÆÆ·ÑÒÔÌ«±Ò²úÉúµÄÊÂÎñÔòÎÞ·¨»Ø¹ö¡£Õâ¸ö¾°ÏóµÄµ××ÓÔÒòÊÇOraclizeÊÇÒ»¸ö¶ÀÁ¢µÄʵÌ壬µ¼ÖÂÂß¼ÉÏÓ¦¸ÃÆëÈ«µÄÒ»¸ö²Ù×÷±»Ô׸î³ÉÁËÁ½¸öÊÂÎñ¡£Òò¶ø£¬Í¨¹ýOraclizeÓëÁ´ÏÂÊý¾Ý½»»¥Ê±Ö»ÄÜÔ½·¢Ó×ÐÄ£¬´úÂë±àд±ØÒªÔ½·¢ÉóÉ÷¡£
¶þ¡¢ÅÓÊÏ´ú±ÒºÏÔ¼·ì϶
ÒÔÌ«·»ÖÇÄܺÏÔ¼ÖлìºÏ½øÁ˲»ÉÙÅÓÊÏȦÌ׺ÏÔ¼£¬ËûÃÇÏòͶ×ÊÕß³Ðŵ£¬ÈôÊÇÄãÏòijºÏԼͶ×ÊÒ»±ÊÒÔÌ«·»£¬Ëü¾Í»áÒÔÒ»¸ö¸ß»Ø±¨ÂÊ»ØÔùÄã¸ü¶àµÄÒÔÌ«±Ò£¬È»¶ø¸ß»Ø±¨Ö»ÄÜ´ÓºóÐøµÄͶ×ÊÕßÄÇÀïÔ´Ô´²»Ðݵؼ³È¡×ʽðÒÔ·´À¡¸øÇ°ÃæµÄͶ×ÊÕß¡£
1¡¢¹¥»÷°¸Àý£ºETHX( 0x1c98eea5fe5e15d77feeabc0dfcfad32314fd481)
ETHXÊÇÒ»¸öµäÐ͵ÄÅÓÊÏ´ú±ÒºÏÔ¼¡£¸ÃºÏÔ¼Äܹ»µ±×÷Ðé¹¹±ÒÂòÂôËù£¬µ«Ö»ÓÐETHºÍETHX (ERC20 token)ÂòÂô¶Ô£¬Ã¿´ÎÂòÂô£¬¶¼ÓÐ5%µÄtoken·ÖÅ䏸Õû¸öƽ̨µÄÒÑÓеÄtoken³ÖÓÐÕߣ¬Òò¶øtoken³ÖÓÐÕßÔÚ³Ö±ÒÆÚ¼ä£¬½«»áÖ±½Ó׬ȡвɰìÕߺ;ÉÅ×ÊÛÕßµÄÊÖÐø·Ñ¡£´ÓETHXºÏÔ¼´úÂëÄܹ»¿´³ö£¬¸ÃºÏÔ¼¶ÔtransferFromº¯Êý½øÐÐÁËÀ©´ó£¬transferFromº¯ÊýÊ×ÏȽøÐÐallowanceÏÞ¶îÅж¨£¬¶øºóŲÓÃÁË×Ô½ç˵µÄtransferTokensº¯ÊýÀ´ÊµÏÖתÕË¡£
ÔÚtransferTokensº¯ÊýÖУ¬µ±toÕË»§µØÖ·²»µÅ×ÚºÏÔ¼µØÖ·£¬ÓÉÓÚÊÂÏȶÔfromÕË»§¶î¶È½øÐÐÁ˰²È«²é³£¬Òò¶øºóÃæ¶ÔfromÕË»§µÄbalanceÔËËã²»»á²úÉúÒç³ö¡£
µ±toÕË»§µØÖ·µÅ×ÚºÏÔ¼µØÖ·Ê±£¬ÔòŲÓÃsellº¯Êý£¬sellº¯ÊýÖÐÓÉÓÚ´úÂë±àдʧÎó£¬ÃýÎóµÄ½«fromд³Émsg.sender£¬¶Ômsg.senderµÄ¶î¶È½øÐÐÁ˼õ·¨²Ù×÷£¬¶øÔÚ¼õ·¨²Ù×÷ǰûÓнøÐа²È«²é³£¬Òò¶ø´æÔÚÒç¶Âí½Å¡£
ΪÁËʵÏÖ¶ÔÕâ¸öÒç¶Âí½ÅµÄ¹¥»÷£¬¹¥»÷Õß±ØÒª2¸öÕË»§A¡¢B£¬ÆäÖÐAÕË»§´ú±ÒÓà¶î²»Îª0£¬BÕË»§´ú±ÒΪ0¡£
? AÕË»§Å²ÓÃapprove¸øBÊÚȨһ²¿ÃÅתÕ˶î¶È£¬Èç¹ûÊÚȨ¶î¶ÈΪ1£»
? BÕË»§Å²ÓÃtransferFrom£¬´ÓAÕË»§×ª1µ¥Ôª´ú±Òµ½ÖÇÄܺÏÔ¼£»transferFromŲÓÃsellº¯Êýʱ´¥·¢ÕûÊýÒç³ö£¬¼´0-1=2^255¡£BÕË»§ÔÚÓà¶îΪ0µÄÇé¿öÏ»ñµÃÁË×î´ó¶î¶ÈµÄtoken¡£
ÔÚETHXºÏÔ¼¹¥»÷Á´ÖУ¬¹¥»÷ÕßʹÓÃÁËÁ½¸öÕË»§µØÖ·£¬±ðÀëΪ£º
0x423b1404f51a2cdae57e597181da0a4ca4492f30
0x17a6e289e16b788505903cc7cf966f5e33dd1b94
Ê×ÏÈ£¬0x17a6e289e16b788505903cc7cf966f5e33dd1b94ŲÓÃapprove¸ø0x423b1404f51a2cdae57e597181da0a4ca4492f30ÊÚȨתÕ˶î¶È£¬²ÎÊývalue=1¡£
¶øºó£¬0x423b1404f51a2cdae57e597181da0a4ca4492f30ŲÓÃtransferFrom²½Ö裬´ÓÕË»§0x17a6e289e16b788505903cc7cf966f5e33dd1b94ÏòETHXºÏÔ¼µØÖ·0x1c98eea5fe5e15d77feeabc0dfcfad32314fd481 ×ªÒÆ1¸öToken¡£
ŲÓÃǰ£¬balance(0x423b1404f51a2cdae57e597181da0a4ca4492f30)=0¡£Å²Óúó£¬Òç³öºóbalance(0x423b1404f51a2cdae57e597181da0a4ca4492f30)=2^255¡£
¼à¿ØÆ½Ì¨ÏÔʾÒѾ±»¹¥»÷µÄͬÀà´ú±ÒºÏÔ¼ÈçÏÂ±í£º
Èý¡¢SafeMathʹÓò»µ±
ÒÔÌ«·»Ðé¹¹»úEVM½ç˵ÎÞ·ûºÅÕûÊýΪuint256£¬Äܹ»°µÊ¾Ò»¸ö256λµÄ´óÕûÊý£¬µ«²¢Ã»ÓÐÌṩÒç³öµÄ¼ì²â»úÔì¡£OpenZepplineÊÇÒ»¸öµÚÈý·½ÖÇÄܺÏÔ¼¿â£¬ÊµÏÖÁËÒ»Ì×SafeMath¿âÀ´¼ì²âÒç³ö¡£Æä´úÂëÈçÏ£º
SafeMathʹÓÃÄÚ½¨µÄrequire»òassertÀ´²é³ÔËËãÊÇ·ñ²úÉúÒç³ö£¬ÈôÊDzúÉúÁËÒç³ö£¬requireºÍassertÖÐÔ̺¬µÄ´úÂë»áʹ¸ÃÊÂÎñ»Ø¹ö¡£µ«ÓÐЩ¿ª·¢Õß²»ÄÜÆëÈ«Àí½âSafeMathÄ£°æ´úÂ룬µ¼ÖºÏÔ¼´úÂëÖÐÒÀÈ»´æÔÚ·ì϶¡£
1¡¢¹¥»÷°¸Àý£ºUCN (0x6EF5B9ae723Fe059Cac71aD620495575d19dAc42)
UCN£¨http://www.saveunicoins.com/Unicorn/index.html£©ÊÇÒ»¸öÖÇÄܺÏÔ¼DAppÀûÓ᣺ÏÔ¼´úÂëÔÚSafeMath¿âÖÐ×¢½âassertÓï¾ä£¬Òò¶øSafeMathº¯ÊýµÈͬÓÚÖ±½Ó½øÐÐËãÊõÔËË㣬ûÓÐÈκΰ²È«²é³¡£²¢ÇÒÔÚtransferFromº¯ÊýÖУ¬×¢½âÖÐÉêÃ÷subº¯ÊýÊǰ²È«µÄ£¬²»ÖªÂ·ÕâÊÇ¿ª·¢ÈËÔ±µÄºöÂÔ»¹ÊÇÓÐÒâÁôϵĺóÃÅ¡£
ÓÉÓÚsubº¯ÊýµÈͬÓÚËãÊõÔËË㣬balances[_from] = balances[_from].sub(_value);
´æÔÚÕûÊýÏÂÒç·ì϶£¬Äܹ»Ê¹µÃÕË»§Óà¶îÔì³ÉÒ»¸ö¼«´óÖµ¡£
2¡¢¹¥»÷°¸Àý£ºEMVC£¨0xd3F5056D9a112cA81B0e6f9f47F3285AA44c6AAA£©
EMVC£¨http://crypto7.biz/£©ºÏÔ¼´úÂëÔÚSafeMath¿âÖÐʹÓÃÁËÒ»¸ö×Ô½ç˵µÄassertÀ´°ü°ìÄÚ½¨µÄassert¡£ÔÚassertº¯ÊýÖУ¬ÈôÊDzÎÊýassertionΪfalseÔòÖ±½Óreturn£¬²¢Ã»ÓнøÐÐÒì³£´¦Öá£Òò¶øSafeMathº¯ÊýµÈͬÓÚÖ±½Ó½øÐÐËãÊõÔËË㣬ûÓÐÈκΰ²È«²é³¡£
¹¥»÷ÕßÄܹ»Ê¹ÓÃtransferº¯ÊýÉèÖÃËÁÒâÕË»§Óà¶îΪËÁÒâÖµ¡£
ËÄ¡¢×ܽá
µ±ÖÇÄܺÏԼҪʵÏÖ¸ü¶àÖ°ÄÜʱ£¬´úÂë»áÏàÓ¦±äµÃÔ½·¢¸´ÔÓ£¬ÓëERC20³ß¶È´úÂëµÄ²î¾àÒ²Ô½À´Ô½´ó£¬Òò¶øÇ±Ôڵķì϶ÐÎòԽ·¢¶àÑù¡£ÎªÁ˱£ÕÏÖÇÄܺÏÔ¼µÄ°²È«£¬³ý×ñѰ²È«¿ª·¢×¼Ôò¡¢ÒÀÕÕ¡°Check Lists¡±½øÐлùÏß²é³±í£¬»¹±ØÒªÖ´ÐиüÉî¿ÌÏêϸµÄÉ󼯡£


¾©¹«Íø°²±¸11010802024551ºÅ