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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Çø¿éÁ´DApp¿ª·¢»·¾³embark³õ̽
 
×÷Õߣºlambeta
  2960  次浏览      29
 2020-2-21
 
±à¼­ÍƼö:
±¾ÎĽ²½âembarkÊÇʲô£¬embarkµÄ±ã½ÝÖ®´¦£¬IPFS·Ö²¼Ê½Íйܣ¬¿ìËÙʹÓÃDAppµÈÏ£Íû¶ÔÄúÓÐËù°ïÖú
±¾ÎÄÀ´×ÔÓÚÌÚÑ¶ÔÆÉçÇø£¬ÓÉ»ðÁú¹ûÈí¼þDelores±à¼­¡¢ÍƼö¡£

embarkÊÇʲô

embarkÊÇÒ»¿îÌØ¶¨ÓÚEthereumÇø¿éÁ´Æ½Ì¨µÄDApp¿ª·¢»·¾³£¬¸¨Öú¿ª·¢Õß´´½¨¡¢¹¹½¨±àÒë¡¢²âÊԺͲ¿ÊðDApp£¬¿ÉÎ޷켯³É¼ÆË㣨EVM£©¡¢´æ´¢£¨IPFS/Swarm£©ºÍÍøÂ磨Whisper£©×ÊÔ´¡£

embarkµÄ±ã½ÝÖ®´¦

ÔÚ³¢ÊÔembark²¢ºÍtruffle¿ò¼Ü½øÐжԱÈÖ®ºó£¬ÎÒ×ܽáÒÔϼ¸¸ö·½ÃæµÄÓÅÊÆ£º¹¦ÄÜÈ«Ãæ£¬ÉÏÊÖѸËÙ£¬·´À¡¿ìËÙ£¬¿ÉÊÓ»¯³Ì¶È¸ß£¬ºÏÔ¼¿Éµ÷ÊÔ¡£

¹¦ÄÜÈ«Ãæ

ÕýÈçembark¸ÅÀÀËùÑÔ£¬embark²¢²»½ö½öÊÇÒ»¿îÖ»Ìṩ¹¹½¨±àÒë¡¢²âÊÔ²¿Êð¹¦ÄܵĿª·¢¹¤¾ß£¬»¹ÊÇÒ»ÕûÌ׵Ŀª·¢»·¾³¡£Ëü°üº¬ÁËÖÇÄܺÏÔ¼×Ô¶¯²¿Ê𣬿ͻ§¶Ë(UI)¿ª·¢£¬²âÊÔ£¬DApp·Ö²¼Ê½Íйܣ¨IPFS/Swarm£©£¬µã¶ÔµãͨÐÅ£¨Whipser£©ºÍ×é¼þ¼à¿Ø¡¢ÔÚÏßIDE¼°´úÂëµ÷ÊÔ£¨Cockpit£©µÈ¹¦ÄÜ¡£

Èç¹ûºÍtruffle¿ò¼Ü±È½Ï£¬embark¼¸ºõ°üº¬ÁËËüÌṩµÄËùÓй¦ÄÜ¡£²»¹ý£¬embarkȱʧÁËtruffleÔÚmigration·½ÃæµÄ¹¦ÄÜ£¬»ùÓÚ¶Ô²»¿É±ä»ù´¡ÉèÊ©µÄ¿¼Á¿£¬embarkÓбØÒªÓµ±§ÕâÏî±ê׼ʵ¼ù¡£

embark¿¼ÂÇÁ˵¥¶À¿ª·¢ÖÇÄܺÏÔ¼µÄ¿ÉÄÜÐÔ£¬ËùÒÔÔÊÐí¿ª·¢ÕßÔÚ´´½¨ÏîĿʱֻ´´½¨ÖÇÄܺÏÔ¼ÏîÄ¿½á¹¹£¬Í¨¹ýÆôÓÃ--contracts-onlyÑ¡Ïî¡£¶øÇÒÔÚ¹¹½¨±àÒëʱ£¬Ò²¿ÉÒÔÖ¸¶¨embark build --contractsÃüÁîµ¥¶À¹¹½¨ÖÇÄܺÏÔ¼¡£

ÉÏÊÖѸËÙ

Õâ¸öά¶ÈËäÈ»ÓеãÖ÷¹Û£¬µ«ÊǺÜÖµµÃÄóöÀ´Ëµ¡£Ò»°ãѧϰÐµĹ¤¾ß£¬ÐèÒª»¨ºÜ¶àʱ¼ä¿´ÎĵµÑ§Ï°»ù±¾¸ÅÄîºÍ²Ù×÷Á÷³Ì£¬×îÄÕ»ðµÄ¾ÍÊÇÊìϤ¸÷ÖÖÅäÖÃÏµ±Äã×óÖ§ÓÒç©£¬ÊÖæ½ÅÂÒÈù¤¾ß³ÌÐòÅÜÆðÀ´£¬³ýÁËÀË·Ñʱ¼ä£¬Ò²²àÃæÖ¤Ã÷¸Ã¹¤¾ß²»¹»³ÉÊì¡¢¶Ô¿ª·¢Õß²»ÓѺá£

ºÜÒâÍâµÄÊÇ£¬±¾À´ÒÔΪÕâôһ¸ö´ó¶øÈ«µÄ¿ª·¢»·¾³ÉèÖÃÆðÀ´Ò»¶¨µÃºÄ·Ñ²»ÉÙʱ¼ä£¬½á¹ûÈ´ÊdzýÁËÓÃyarn global add embark±¨³öÒ»¸öcompilerºÍyarn²»¼æÈݺ󣬸ijÉÁËnpm install -g embark°²×°£¬¾ÍÔÙûÓÐÌØ±ðÄÕÈ˵ÄÎÊÌâ³öÏÖÁË¡£

×¢Ò⣺

ÉÏÃæµÄ°²×°´íÎóÆäʵÊÇÒòΪembark¶ÔÓÚyarnµÄ°æ±¾ÓÐÒ»¶¨µÄÒªÇ󣬴ÓembarkÔ´ÂëÖпÉÒԵõ½ÈçÏÂǰÖÃÌõ¼þ¡£

"engines": {
"node": ">=8.12.0",
"npm": ">=6.4.1",
"yarn": ">=1.12.3"
},

ÎÒµ±Ç°µÄyarn°æ±¾ÊÇ1.6.0£¬Ê¹ÓÃbrew upgrade yarnÉý¼¶µ½1.15.2¾Í¿ÉÒÔÈ«¾Ö°²×°ÁË¡£

yarn global add embark
...
embark version
4.0.2

embark run»áÆô¶¯Ò»¸öÃüÁîÐÐÖпÉÊÓ»¯½çÃæ£¬ÀïÃæ»á¸æËßÄ㵱ǰDappµÄ״̬£¬°üÀ¨ÖÇÄܺÏÔ¼ÊÇ·ñ²¿Êð£¬ÄÄЩ×é¼þ·þÎñ¿ÉÓã¬×î×îÖØÒªµÄÊÇËü»á¸æËßÄã½ÓÏÂÀ´Äã¸Ã×öʲô£¡ÔÚLogsÊÓ´°ÖУ¬embarkÊÔͼ¸æËßÄ㿪·¢»·¾³È·ÊµÄÄЩÒÀÀµ·þÎñ£¬±ÈÈçgeth½ÚµãûÓÐÆô¶¯£¨ÊÂʵÉÏ£¬¿ÉÒÔÓÃgananche-cli´úÌæ£©£¬ipfs½ÚµãδÕì²âµ½£¬Cockpit Web UIËùÔڶ˿ڻ¹ÓÐDapp·þÎñµÄÈë¿ÚµÈµÈ¡£¶øconsoleÊÓ´°ÔòÊÇÃüÁî½»»¥Èë¿Ú£¬Ò»ÌõhelpÃüÁî¾ÍÄÜչʾºÜ¶àÓÐÓÃÐÅÏ¢¡£

Dashboard

ÒÔÉÏÕâЩÐÅÏ¢¶¼ÎÞÐè²é¿´Îĵµ±ã¿ÉÒÔ»ñµÃ£¬¸öÈ˾õµÃ´Ó³¢ÊÔÖÐѧϰÊÇÌØ±ðÓÐȤµÄÊÂÇé¡£

ÎÒÒ»°ãÄôÓÁ㵽д³öµÚÒ»ÐгÌÐòµÄʱ¼ä×÷ΪÉÏÊÖ¿ìÂýµÄ±ê×¼¡£ÕâÐгÌÐòÊÇÓÃÀ´ÊÔÑ飬δ±ØµÃÊÖд£¬ËùÒÔÎÒÑ¡ÓÃÁËtruffle×Ô´øµÄÑùÀýMetaCoin.solºÍConvertLib.sol¡£

// ConvertLib.sol
pragma solidity ^0.5.0;
library ConvertLib{
function convert
(uint amount,uint conversionRate)
public pure returns
(uint convertedAmount) {
return amount * conversionRate;
}
}

// MetaCoin.sol
pragma solidity ^0.5.0;
import "./ConvertLib.sol";
contract MetaCoin {
mapping (address => uint) balances;
event Transfer
(address indexed _from,
address indexed _to, uint256 _value);
constructor() public {
balances[msg.sender] = 10001;
}
function sendCoin
(address receiver, uint amount)
public returns(bool sufficient) {
if (balances[msg.sender] < amount) return false;
balances[msg.sender] -= amount;
balances[receiver] += amount;
emit Transfer(msg.sender, receiver, amount);
return true;
}
function getBalanceInEth(address addr)
public view returns(uint) {
return ConvertLib.convert(getBalance(addr), 4);
}
function getBalance(address addr)
public view returns(uint) {
return balances[addr];
}
}

µ±°ÑÕâÁ½¸öÖÇÄܺÏÔ¼Îļþ·Åµ½ÏîÄ¿¸ùĿ¼ÏÂcontracts/Ŀ¼Öк󣬺ÏÔ¼´úÂë±»×Ô¶¯±àÒ룬²¢ÔÚContractsÊÓ´°ÖÐչʾ³öÀ´£¬×´Ì¬ÎªDeployed£¬Õâ±íÃ÷ÖÇÄܺÏÔ¼ÒѾ­±»²¿Êðµ½Çø¿éÁ´ÍøÂçÀï¡£Ö®ºó£¬ÎÒ½øÈëCockpit Web UI£¬¾ªÏ²µØ·¢ÏÖÕâ¸ö·þÎñٲȻ¾ÍÊÇÒ»¸ö¸ßÅä°æµÄetherscan.io£¬Í¨¹ýËü²»½ö¿ÉÒԲ鿴²¿ÊðÖ®ºóµÄºÏÔ¼£¬ÉõÖÁ»¹¿ÉÒÔµ÷ÓúÏÔ¼·½·¨¡£

¹ÀËãÏÂÀ´£¬ÎÒÓÃembarkдÍêµÚÒ»ÐдúÂëµÄʱ¼ä»ù±¾¿ÉÒÔºöÂÔ²»¼Æ¡£

·´À¡¿ìËÙ

д³ÌÐò¶¼Ï£ÍûÆä¿ÉÐÐÐÔÄܱ»¿ìËÙÑéÖ¤£¬ÒòΪֻÓÐÕâÑù²ÅÄÜ·½±ã¿ìËٵصü´ú³öÕýÈ·¹¦ÄܵijÌÐò¡£ÎÒËùÖªµÀµÄǰ¶Ë¿ª·¢ÕßÊǰÑÕâ¸ö¹ý³Ì×öµ½¼«ÖµÄȺÌ壬±ÈÈçLiveloading£»embark¶ÔÓÚÖÇÄܺÏÔ¼Ò²ÌṩÁËÒ»ÖµĹ¦ÄÜ¡£µ±Ð޸ĺÏÔ¼Îļþ²¢±£´æÊ±£¬embark»á×Ô¶¯¼ì²â±ä¸üÍ¬Ê±ÖØÐ±àÒëÔÙ²¿Êð£¬Õâ¸ö¹ý³Ì·Ç³£¿ìËÙ£¨µ±È»£¬embark¶ÔÓÚÄÄЩÐ޸ĵĺÏÔ¼ÐèÒªÖØÐ²¿ÊðÊÇÓÐÒ»¶¨ÏÞÖÆµÄ£¬¶øÇÒ¾ÝÎҹ۲죬ÕâÀïÃæÓÐЩDZÔÚµÄbug£¬±ÈÈçÐ޸ĺÏÔ¼constructorÖеÄÄÚÈݾͲ»»á´¥·¢ÖØÐ¹¹½¨£¬¼´±ãÓÃembark resetÒ²²»ÐУ¬Õâ¸öºÍÎĵµµÄÃèÊöÓÐЩ³öÈ룬ֵµÃ»¨Ê±¼äÑо¿Ï£©¡£

×Ô¶¯ÖØÐ¹¹½¨ºÍ²¿ÊðºÏÔ¼¶Ô³ÌÐòÔ±µÄЧÂÊÌáÉýºÜÓаïÖú£¬µ«ÊÇÎÞ·¨¿ìËÙÑé֤ͬÑù´ï²»µ½Ä¿µÄ¡£ËùÐÒµÄÊÇ£¬embark²»½öÌṩÁËCockpitÕâÑùµÄ¿ÉÊÓ»¯¹¤¾ß¸¨ÖúÑéÖ¤ºÏÔ¼µÄÕýÈ·ÐÔ£¬¶øÇÒ»¹Ìṩembark console£¬ÔÚconsoleÖпÉÒÔµ÷Óò¿ÊðºÏÔ¼µÄʵÀý£¬±ÈÈ磺ÊäÈëEmbark (Development) > MetaCoin < ENTER >¾ÍÄÜ»ñÈ¡²¿ÊðºÃµÄʵÀý£¬ÓÐÁ˺ÏԼʵÀý¾Í¿ÉÒÔµ÷ÓÃÆäÉϵķ½·¨½øÐÐÊý¾ÝУÑé¡£

ͬÑùÖØÒªµÄÊÇ£¬embarkÖ§³ÖjsºÍsol°æ±¾²âÊÔ£¬ÎÒ¿ÉÒÔÏñʹÓÃtruffleÒ»ÑùʹÓÃTDDµÄ·½Ê½¿ª·¢DAppÁË¡£

¿ÉÊÓ»¯³Ì¶È¸ß

µ±ÔÚÖÕ¶ËÖÐÔËÐÐembark runʱ£¬embark»á×Ô¶¯½øÈë¿ÉÊÓ»¯½çÃæ£¨dashboard£©¡£ÕâÀïÃæ¼à¿ØµÄÐÅÏ¢»áʵʱ¸æËßÄãDApp¿ª·¢µÄ״̬¡£³ý´ËÖ®Í⣬embark»¹ÌṩÁËDAppµÄWeb server£¬Cockpit Web UIÒ³Ãæ£¬ÕâЩ¾ø¶ÔÊÇ¿ª·¢DApp¼«´óµÄÖúÁ¦¡£

Èç¹û²»ÏëʹÓÃdashboard£¬¿ÉÒÔͨ¹ýembark run --nodashboard½ûÓᣲ»¹ý£¬¸ù¾ÝÎҵľ­Ñ飬½ûÓÃdashboardµÄ½á¹ûÊÇû·¨Ö±½ÓÄõ½½øÈëCockpitµÄ·ÃÎÊtoken£¬»¹ÐèÒªÔËÐÐembark console½øÈëÃüÁîÐе¥¶À»ñÈ¡¡£

´ÓÉÏÃæÕâµãÀ´¿´£¬embarkÔÚ×é¼þ»¯·½Ãæ×öµÃÏ൱³öÉ«£¬ËäÈ»¹¦ÄÜ´ó¶øÈ«£¬µ«ÊDz¢Ã»ÓÐÏÞÖÆÄãɾ¼õ²»±ØÒªµÄ×é¼þ¡¢¶ÀÁ¢ÆôÓøÐÐËȤµÄ×é¼þ

ºÏÔ¼¿Éµ÷ÊÔ

µ÷ÊÔºÏÔ¼ÔÚÒÔǰµÄ¿ª·¢¹ý³ÌÖл¹ÊDZȽÏÄѵ쬲»¹ý½èÖúÓÚCockpit£¬embarkÒ²ÌṩÁËÔÚÏßµ÷ÊÔµÄÄÜÁ¦¡£CockpitÄÚÖÃÒ»¸ö±à¼­Æ÷£¬ËüºÍ±¾µØµÄ¿ª·¢Ä¿Â¼±£³ÖÒ»Ö£¬¸Ã±à¼­Æ÷¾ÍÌṩÁËdebug¹¦ÄÜ¡£ÁíÍ⣬½øÈëExplorerÒ³£¬ÎÒÃÇÉõÖÁ¿ÉÒÔ¶Ôij´ÎµÄtx½øÐÐdebugÑéÖ¤Õâ´ÎºÏÔ¼µ÷ÓõÄÕæÊµÊý¾ÝÁ÷תÇé¿ö¡£

Explorer & Debug

С½á

×ܵÄÀ´Ëµ£¬embarkÊÇÒ»¿îÓÅÐãµÄÇø¿éÁ´¿ª·¢»·¾³¡£Ïà±È½ÏtruffleµÄרעÓÚºÏÔ¼¹¤³Ì»¯µÄŬÁ¦£¬embarkµÄ¹¦Äܸü¼Ó·á¸»£¬¶øÇÒ¸÷×é¼þ×éºÏÐÔºÜÇ¿¡£¶ÔÓÚ¿ª·¢Õß¶øÑÔ£¬¿ìËÙ¿ª·¢³öDApp²ÅÊÇÕæµÄËßÇ󣬶øembarkÏÔÈ»ÔÚÕâÒ»·½Ãæ¾ß±¸ºÜ´óµÄÓÅÊÆ¡£

Ôõô¿ìËÙÍæ×ªembark

¹¤¾ß°æ±¾ºÅ

yarn --version
1.15.2
npm -v
6.4.1
node -v
v10.15.3
embark version
4.0.2

¿ìËÙʹÓÃDApp

embarkĬÈÏ¿ª·¢Ê±¶¼ÊÇ development »·¾³£¬ÎªÁ˶ԽÓÕýÈ·µÄganache-cli£¨Ä£ÄâÒÔÌ«·»¿Í»§¶Ë£©¶Ë¿Ú£¬ÎÒÃÇÐèÒªÐÞ¸Äconfig/contract.jsÎļþÖÐdevelopment/portµ½ganache-cliĬÈϵÄ8545¶Ë¿Ú¡£

ÏÈÖ´ÐÐembark build --pipeline development£¬È»ºóÆô¶¯embark run£¬´Ëʱ¾Í¿ÉÒÔÔÚhttp://localhost:8000²é¿´DAppµÄ½çÃæÁË¡£

IPFS·Ö²¼Ê½ÍйÜ

Ê×Ïȵð²×°IPFSµÄ¿Í»§¶Ë£¬È»ºóÔËÐÐÈçÏÂÃüÁ

ipfs init
ipfs daemon
...
Daemon is ready

µ±ipfsÆô¶¯Íê³Éºó£¬embarkµÄdashboard»áÏÔʾipfs½ÚµãÒÑÁ¬½Ó¡£´ËʱִÐÐembark upload£¬¹¹½¨³öÀ´µÄdistĿ¼¾Í»á±»·Ö·¢µ½ipfsÍøÂ磬Ȼºó¾Í¿ÉÒÔͨ¹ýÄÚÈÝѰַ£¨content-addressed£©µÄ·½Ê½·ÃÎÊÕâ¸ö¾²Ì¬ÍøÕ¾ÁË¡£

IPFS distribution of static pages

   
2960 ´Îä¯ÀÀ       29
 
Ïà¹ØÎÄÕÂ

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

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

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