[{"data":1,"prerenderedAt":757},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fdev\u002Fusing-beam-shaders-with-cli-wallet":3,"docs-surround-\u002Fdocs\u002Fdev\u002Fusing-beam-shaders-with-cli-wallet":748},{"id":4,"title":5,"body":6,"description":739,"extension":740,"image":741,"meta":742,"navTitle":741,"navigation":743,"path":744,"seo":745,"stem":746,"__hash__":747},"docs\u002Fdocs\u002Fdev\u002Fusing-beam-shaders-with-cli-wallet.md","Using Beam Shaders with CLI wallet",{"type":7,"value":8,"toc":731},"minimark",[9,13,23,28,78,82,85,100,118,122,125,135,140,146,151,515,529,577,588,592,602,627,634,640,645,651,655,668,674,677,683,687,727],[10,11,5],"h1",{"id":12},"using-beam-shaders-with-cli-wallet",[14,15,16,17,22],"p",{},"This page is somewhat obsolete, and is replaced with ",[18,19,21],"a",{"href":20},"using-beam-shaders","Using Beam Shaders"," tutorial",[24,25,27],"h3",{"id":26},"prerequisites","Prerequisites",[29,30,31,60,67,75],"ol",{},[32,33,34,35,39,40,43,47,48,52,53,52,56,59],"li",{},"Make sure you have ",[18,36,38],{"href":37},"broken-reference","node running"," and connected to local network.",[41,42],"br",{},[44,45,46],"strong",{},"Notice:"," Shaders are applied after the third fork with height 1500. Therefore, for faster testing, we recommend to define lower heights using the ",[49,50,51],"code",{},"--Fork1",", ",[49,54,55],{},"--Fork2",[49,57,58],{},"--Fork3"," attributes.",[32,61,62,63,66],{},"Create at least one Beam node[link] with ",[49,64,65],{},"--peer=\u003Cip:port of the first node>"," for the transaction replication.",[32,68,69,70,74],{},"Make sure you have Beam ",[18,71,73],{"href":72},"beam-wallets\u002Fcommand-line-wallet","CLI wallet connected to your Beam node"," or to one of the Beam bootstrap nodes.",[32,76,77],{},"You must have funds in your wallet to pay the fee.",[24,79,81],{"id":80},"shaders","Shaders",[14,83,84],{},"There are two types of Shaders in Beam:",[86,87,88,94],"ul",{},[32,89,90,93],{},[44,91,92],{},"Contract Shader"," - implements Smart Contract functionality, is stored on the blockchain and are running on Beam nodes.",[32,95,96,99],{},[44,97,98],{},"App Shaders"," - implements Smart Contract API and is running in Beam wallet.",[14,101,102,106,107,106,115],{},[103,104,105],"em",{},"All examples refer to a sample application 'mydapp' which has two"," ",[18,108,112],{"href":109,"rel":110},"https:\u002F\u002Fgithub.com\u002FBeamMW\u002Fbeam\u002Ftree\u002Fmaster\u002Fbvm\u002FShaders\u002Fvault",[111],"nofollow",[103,113,114],{},"Vault",[103,116,117],{},"Shaders: App Shader(app.wasm) and Contract Shader(contract.wasm).",[24,119,121],{"id":120},"shader-api","Shader API",[14,123,124],{},"First of all, you need to know the available actions of a contract. To see all commands supported by the App Shader enter the following command:",[126,127,132],"pre",{"className":128,"code":130,"language":131},[129],"language-text",".\u002Fbeam-wallet-masternet shader --shader_app_file=mydapp\u002Fapp.wasm -n \u003Cnode>\n","text",[49,133,130],{"__ignoreMap":134},"",[14,136,137,139],{},[41,138],{},"\nThe output is a json format line:",[126,141,144],{"className":142,"code":143,"language":131},[129],"Shader output: {\"roles\": {\"manager\": {\"create\": {},\"destroy\": {\"cid\": \"ContractID\"},\"view\": {},\"view_logs\": {\"cid\": \"ContractID\"},\"view_accounts\": {\"cid\": \"ContractID\"},\"view_account\": {\"cid\": \"ContractID\",\"pubKey\": \"PubKey\"}},\"my_account\": {\"view\": {\"cid\": \"ContractID\"},\"get_key\": {\"cid\": \"ContractID\"},\"get_proof\": {\"cid\": \"ContractID\",\"aid\": \"AssetID\"},\"deposit\": {\"cid\": \"ContractID\",\"pkForeign\": \"PubKey\",\"bCoSigner\": \"uint32_t\",\"amount\": \"Amount\",\"aid\": \"AssetID\"},\"withdraw\": {\"cid\": \"ContractID\",\"pkForeign\": \"PubKey\",\"bCoSigner\": \"uint32_t\",\"amount\": \"Amount\",\"aid\": \"AssetID\"}}}}\n",[49,145,143],{"__ignoreMap":134},[14,147,148,150],{},[41,149],{},"\nFor convenience, let's put it this way:",[126,152,156],{"className":153,"code":154,"language":155,"meta":134,"style":134},"language-json shiki shiki-themes github-dark","{\n  \"roles\": {\n    \"manager\": {\n      \"create\": {},\n      \"destroy\": { \"cid\": \"ContractID\" },\n      \"view\": {},\n      \"view_logs\": { \"cid\": \"ContractID\" },\n      \"view_accounts\": { \"cid\": \"ContractID\" },\n      \"view_account\": { \"cid\": \"ContractID\", \"pubKey\": \"PubKey\" }\n    },\n    \"my_account\": {\n      \"view\": { \"cid\": \"ContractID\" },\n      \"get_key\": { \"cid\": \"ContractID\" },\n      \"get_proof\": { \"cid\": \"ContractID\", \"aid\": \"AssetID\" },\n      \"deposit\": {\n        \"cid\": \"ContractID\",\n        \"pkForeign\": \"PubKey\",\n        \"bCoSigner\": \"uint32_t\",\n        \"amount\": \"Amount\",\n        \"aid\": \"AssetID\"\n      },\n      \"withdraw\": {\n        \"cid\": \"ContractID\",\n        \"pkForeign\": \"PubKey\",\n        \"bCoSigner\": \"uint32_t\",\n        \"amount\": \"Amount\",\n        \"aid\": \"AssetID\"\n      }\n    }\n  }\n}\n","json",[49,157,158,167,177,185,194,216,224,240,256,283,289,297,312,328,354,362,375,387,400,413,424,430,438,449,460,471,482,491,497,503,509],{"__ignoreMap":134},[159,160,163],"span",{"class":161,"line":162},"line",1,[159,164,166],{"class":165},"s95oV","{\n",[159,168,170,174],{"class":161,"line":169},2,[159,171,173],{"class":172},"sDLfK","  \"roles\"",[159,175,176],{"class":165},": {\n",[159,178,180,183],{"class":161,"line":179},3,[159,181,182],{"class":172},"    \"manager\"",[159,184,176],{"class":165},[159,186,188,191],{"class":161,"line":187},4,[159,189,190],{"class":172},"      \"create\"",[159,192,193],{"class":165},": {},\n",[159,195,197,200,203,206,209,213],{"class":161,"line":196},5,[159,198,199],{"class":172},"      \"destroy\"",[159,201,202],{"class":165},": { ",[159,204,205],{"class":172},"\"cid\"",[159,207,208],{"class":165},": ",[159,210,212],{"class":211},"sU2Wk","\"ContractID\"",[159,214,215],{"class":165}," },\n",[159,217,219,222],{"class":161,"line":218},6,[159,220,221],{"class":172},"      \"view\"",[159,223,193],{"class":165},[159,225,227,230,232,234,236,238],{"class":161,"line":226},7,[159,228,229],{"class":172},"      \"view_logs\"",[159,231,202],{"class":165},[159,233,205],{"class":172},[159,235,208],{"class":165},[159,237,212],{"class":211},[159,239,215],{"class":165},[159,241,243,246,248,250,252,254],{"class":161,"line":242},8,[159,244,245],{"class":172},"      \"view_accounts\"",[159,247,202],{"class":165},[159,249,205],{"class":172},[159,251,208],{"class":165},[159,253,212],{"class":211},[159,255,215],{"class":165},[159,257,259,262,264,266,268,270,272,275,277,280],{"class":161,"line":258},9,[159,260,261],{"class":172},"      \"view_account\"",[159,263,202],{"class":165},[159,265,205],{"class":172},[159,267,208],{"class":165},[159,269,212],{"class":211},[159,271,52],{"class":165},[159,273,274],{"class":172},"\"pubKey\"",[159,276,208],{"class":165},[159,278,279],{"class":211},"\"PubKey\"",[159,281,282],{"class":165}," }\n",[159,284,286],{"class":161,"line":285},10,[159,287,288],{"class":165},"    },\n",[159,290,292,295],{"class":161,"line":291},11,[159,293,294],{"class":172},"    \"my_account\"",[159,296,176],{"class":165},[159,298,300,302,304,306,308,310],{"class":161,"line":299},12,[159,301,221],{"class":172},[159,303,202],{"class":165},[159,305,205],{"class":172},[159,307,208],{"class":165},[159,309,212],{"class":211},[159,311,215],{"class":165},[159,313,315,318,320,322,324,326],{"class":161,"line":314},13,[159,316,317],{"class":172},"      \"get_key\"",[159,319,202],{"class":165},[159,321,205],{"class":172},[159,323,208],{"class":165},[159,325,212],{"class":211},[159,327,215],{"class":165},[159,329,331,334,336,338,340,342,344,347,349,352],{"class":161,"line":330},14,[159,332,333],{"class":172},"      \"get_proof\"",[159,335,202],{"class":165},[159,337,205],{"class":172},[159,339,208],{"class":165},[159,341,212],{"class":211},[159,343,52],{"class":165},[159,345,346],{"class":172},"\"aid\"",[159,348,208],{"class":165},[159,350,351],{"class":211},"\"AssetID\"",[159,353,215],{"class":165},[159,355,357,360],{"class":161,"line":356},15,[159,358,359],{"class":172},"      \"deposit\"",[159,361,176],{"class":165},[159,363,365,368,370,372],{"class":161,"line":364},16,[159,366,367],{"class":172},"        \"cid\"",[159,369,208],{"class":165},[159,371,212],{"class":211},[159,373,374],{"class":165},",\n",[159,376,378,381,383,385],{"class":161,"line":377},17,[159,379,380],{"class":172},"        \"pkForeign\"",[159,382,208],{"class":165},[159,384,279],{"class":211},[159,386,374],{"class":165},[159,388,390,393,395,398],{"class":161,"line":389},18,[159,391,392],{"class":172},"        \"bCoSigner\"",[159,394,208],{"class":165},[159,396,397],{"class":211},"\"uint32_t\"",[159,399,374],{"class":165},[159,401,403,406,408,411],{"class":161,"line":402},19,[159,404,405],{"class":172},"        \"amount\"",[159,407,208],{"class":165},[159,409,410],{"class":211},"\"Amount\"",[159,412,374],{"class":165},[159,414,416,419,421],{"class":161,"line":415},20,[159,417,418],{"class":172},"        \"aid\"",[159,420,208],{"class":165},[159,422,423],{"class":211},"\"AssetID\"\n",[159,425,427],{"class":161,"line":426},21,[159,428,429],{"class":165},"      },\n",[159,431,433,436],{"class":161,"line":432},22,[159,434,435],{"class":172},"      \"withdraw\"",[159,437,176],{"class":165},[159,439,441,443,445,447],{"class":161,"line":440},23,[159,442,367],{"class":172},[159,444,208],{"class":165},[159,446,212],{"class":211},[159,448,374],{"class":165},[159,450,452,454,456,458],{"class":161,"line":451},24,[159,453,380],{"class":172},[159,455,208],{"class":165},[159,457,279],{"class":211},[159,459,374],{"class":165},[159,461,463,465,467,469],{"class":161,"line":462},25,[159,464,392],{"class":172},[159,466,208],{"class":165},[159,468,397],{"class":211},[159,470,374],{"class":165},[159,472,474,476,478,480],{"class":161,"line":473},26,[159,475,405],{"class":172},[159,477,208],{"class":165},[159,479,410],{"class":211},[159,481,374],{"class":165},[159,483,485,487,489],{"class":161,"line":484},27,[159,486,418],{"class":172},[159,488,208],{"class":165},[159,490,423],{"class":211},[159,492,494],{"class":161,"line":493},28,[159,495,496],{"class":165},"      }\n",[159,498,500],{"class":161,"line":499},29,[159,501,502],{"class":165},"    }\n",[159,504,506],{"class":161,"line":505},30,[159,507,508],{"class":165},"  }\n",[159,510,512],{"class":161,"line":511},31,[159,513,514],{"class":165},"}\n",[14,516,517,518,521,522,525,526,528],{},"As you can see above, there are two roles in this example: ",[49,519,520],{},"manager"," and ",[49,523,524],{},"my_account",". Each role has its own actions with or without required attributes. In this example, role ",[49,527,520],{}," has the following actions:",[86,530,531,536,546,551,558,565],{},[32,532,533],{},[49,534,535],{},"create",[32,537,538,541,542,545],{},[49,539,540],{},"destroy",", requires the ",[49,543,544],{},"cid"," attribute",[32,547,548],{},[49,549,550],{},"view",[32,552,553,541,556,545],{},[49,554,555],{},"view_logs",[49,557,544],{},[32,559,560,541,563,545],{},[49,561,562],{},"view_accounts",[49,564,544],{},[32,566,567,570,571,521,573,576],{},[49,568,569],{},"view_account",", requires ",[49,572,544],{},[49,574,575],{},"pubKey"," attributes",[14,578,579],{},[103,580,581,583,584,587],{},[44,582,544],{},"(i.e. ",[44,585,586],{},"contract id","), is the frequently required attribute. We get it after our contract has been deployed. The same contract which has been deployed with different attributes, will have different values.",[24,589,591],{"id":590},"commands","Commands",[14,593,594,595,598,599,601],{},"All command start with ",[49,596,597],{},".\u002Fbeam-wallet-masternet shader",".",[41,600],{},"\nThere are required flags that need to be passed to work with the contract:",[86,603,604,610,616,622],{},[32,605,606,609],{},[49,607,608],{},"--shader_app_file=\u003Capp.wasm>"," - for application shader",[32,611,612,615],{},[49,613,614],{},"--shader_contract_file=\u003Ccontract.wasm>"," - for contract shader",[32,617,618,621],{},[49,619,620],{},"--shader_args=\"role=\u003Crole>,action=\u003Caction>\""," - shader arguments",[32,623,624],{},[49,625,626],{},"-n \u003Cnode>",[14,628,629,106,631],{},[44,630,46],{},[103,632,633],{},"All arguments are passed separated by commas. For example:",[126,635,638],{"className":636,"code":637,"language":131},[129],"--shader_args=\"role=manager,action=view\"\n",[49,639,637],{"__ignoreMap":134},[14,641,642],{},[103,643,644],{},"If the action has additional attributes, they also are separated by commas:",[126,646,649],{"className":647,"code":648,"language":131},[129],"--shader_args=\"role=manager,action=view_logs,cid=d9c5d1782b2d2b6f733486be480bb0d8bcf34d5fdc63bbac996ed76af541cc14\"\n",[49,650,648],{"__ignoreMap":134},[24,652,654],{"id":653},"deploy-contract","Deploy contract",[14,656,657,658,660,661,663,664,667],{},"To work with the contract, it needs to be deployed. In our Vault example contract, the deployment corresponds to the ",[49,659,520],{}," role and ",[49,662,535],{}," action. Based on our knowledge, we got the following command to ",[44,665,666],{},"deploy contract",":",[126,669,672],{"className":670,"code":671,"language":131},[129],".\u002Fbeam-wallet-masternet shader --shader_app_file=mydapp\u002Fapp.wasm --shader_args=\"role=manager,action=create\" --shader_contract_file=mydapp\u002Fcontract.wasm -n \u003Cnode>\n",[49,673,671],{"__ignoreMap":134},[14,675,676],{},"Output example:",[126,678,681],{"className":679,"code":680,"language":131},[129],"Creating new contract invocation tx on behalf of the shader\nContract ID: d9c5d1782b2d2b6f733486be480bb0d8bcf34d5fdc63bbac996ed76af541cc14\n        Comment: create Vault contract  Total fee: 1100000 GROTH\nI 2022-06-06.11:43:08.288 [ac09d5dc897647bf876b7d17d8219a77][1] Get proof for kernel: 6625e9f7756a98eb\nI 2022-06-06.11:43:08.289 Synchronizing with node: 100% (1\u002F1)\nI 2022-06-06.11:43:08.289 Current state is 8-65a2ecdf447ad942\nI 2022-06-06.11:43:18.354 Sync up to 9-7d15da24d2717100\nI 2022-06-06.11:43:18.354 Synchronizing with node: 0% (0\u002F2)\nI 2022-06-06.11:43:18.355 CoinID: Key=mine-1:1:1, Value=8000000000 Maturity=6 Spent, Height=9\nI 2022-06-06.11:43:18.356 CoinID: Key=chng-1:0:3958598515398969808, Value=7998900000 Maturity=9 Confirmed, Height=9\nI 2022-06-06.11:43:18.356 Synchronizing with node: 50% (1\u002F2)\nI 2022-06-06.11:43:18.356 Synchronizing with node: 100% (2\u002F2)\nI 2022-06-06.11:43:18.356 Current state is 9-7d15da24d2717100\nI 2022-06-06.11:43:18.356 [ac09d5dc897647bf876b7d17d8219a77][1] Get proof for kernel: 6625e9f7756a98eb\nI 2022-06-06.11:43:18.357 [ac09d5dc897647bf876b7d17d8219a77] Transaction completed\n",[49,682,680],{"__ignoreMap":134},[24,684,686],{"id":685},"command-examples","Command examples",[86,688,689,707],{},[32,690,691,692,698,700,701],{},"View deployed contracts:",[126,693,696],{"className":694,"code":695,"language":131},[129],".\u002Fbeam-wallet-masternet shader --shader_app_file=mydapp\u002Fapp.wasm --shader_args=\"role=manager,action=view\" --shader_contract_file=mydapp\u002Fcontract.wasm -n \u003Cnode>\n",[49,697,695],{"__ignoreMap":134},[41,699],{},"The output could be like this:",[126,702,705],{"className":703,"code":704,"language":131},[129],"Shader output: {\"contracts\": [{\"cid\": \"d9c5d1782b2d2b6f733486be480bb0d8bcf34d5fdc63bbac996ed76af541cc14\",\"Height\": 9}]}\n",[49,706,704],{"__ignoreMap":134},[32,708,709,710,712,713,719,676,721],{},"Destroy contract (with ",[49,711,544],{}," from the example above)",[126,714,717],{"className":715,"code":716,"language":131},[129],".\u002Fbeam-wallet-masternet shader --shader_app_file=mydapp\u002Fapp.wasm --shader_contract_file=mydapp\u002Fcontract.wasm --shader_args=\"role=manager,action=destroy,cid=d9c5d1782b2d2b6f733486be480bb0d8bcf34d5fdc63bbac996ed76af541cc14\" -n localhost:10000\n",[49,718,716],{"__ignoreMap":134},[41,720],{},[126,722,725],{"className":723,"code":724,"language":131},[129],"Creating new contract invocation tx on behalf of the shader\nContract ID: d9c5d1782b2d2b6f733486be480bb0d8bcf34d5fdc63bbac996ed76af541cc14\n      Comment: destroy Vault contract   Total fee: 1100000 GROTH\nI 2022-06-06.12:34:15.962 Sync up to 311-788f821396683a25\nI 2022-06-06.12:34:15.962 Synchronizing with node: 0% (0\u002F2)\nI 2022-06-06.12:34:15.967 Synchronizing with node: 0% (0\u002F2)\nI 2022-06-06.12:34:15.967 CoinID: Key=mine-1:1:307, Value=8000000000 Maturity=312 Confirmed, Height=307\nI 2022-06-06.12:34:15.968 CoinID: Key=mine-1:1:308, Value=8000000000 Maturity=313 Confirmed, Height=308\nI 2022-06-06.12:34:15.968 CoinID: Key=mine-1:1:309, Value=8000000000 Maturity=314 Confirmed, Height=309\nI 2022-06-06.12:34:15.968 CoinID: Key=mine-1:1:310, Value=8000000000 Maturity=315 Confirmed, Height=310\nI 2022-06-06.12:34:15.969 CoinID: Key=mine-1:1:311, Value=8000000000 Maturity=316 Confirmed, Height=311\nI 2022-06-06.12:34:15.969 Synchronizing with node: 50% (1\u002F2)\nI 2022-06-06.12:34:15.969 Synchronizing with node: 100% (2\u002F2)\nI 2022-06-06.12:34:15.969 Current state is 311-788f821396683a25\nI 2022-06-06.12:34:15.969 [7b8eb0b0bd2340529996c7598d3ebaff][1] Get proof for kernel: eb45c335bca2e17c\nI 2022-06-06.12:34:15.970 Synchronizing with node: 100% (1\u002F1)\nI 2022-06-06.12:34:15.970 Current state is 311-788f821396683a25\nI 2022-06-06.12:34:26.111 Rolled back to 306-910bc6ca48d05757\nI 2022-06-06.12:34:26.112 Sync up to 312-d156e1bf16939393\nI 2022-06-06.12:34:26.113 Synchronizing with node: 0% (0\u002F2)\nI 2022-06-06.12:34:26.113 CoinID: Key=mine-1:1:307, Value=8000000000 Maturity=312 Confirmed, Height=307\nI 2022-06-06.12:34:26.113 CoinID: Key=mine-1:1:308, Value=8000000000 Maturity=313 Confirmed, Height=308\nI 2022-06-06.12:34:26.114 CoinID: Key=chng-1:0:3958598515398969808, Value=7998900000 Maturity=9 Spent, Height=312\nI 2022-06-06.12:34:26.114 CoinID: Key=chng-1:0:12345322638362229725, Value=7997800000 Maturity=312 Confirmed, Height=312\nI 2022-06-06.12:34:26.115 Synchronizing with node: 50% (1\u002F2)\nI 2022-06-06.12:34:26.115 Synchronizing with node: 100% (2\u002F2)\nI 2022-06-06.12:34:26.115 Current state is 312-d156e1bf16939393\nI 2022-06-06.12:34:26.115 [7b8eb0b0bd2340529996c7598d3ebaff][1] Get proof for kernel: eb45c335bca2e17c\nI 2022-06-06.12:34:26.116 [7b8eb0b0bd2340529996c7598d3ebaff] Transaction completed\n",[49,726,724],{"__ignoreMap":134},[728,729,730],"style",{},"html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":134,"searchDepth":169,"depth":169,"links":732},[733,734,735,736,737,738],{"id":26,"depth":179,"text":27},{"id":80,"depth":179,"text":81},{"id":120,"depth":179,"text":121},{"id":590,"depth":179,"text":591},{"id":653,"depth":179,"text":654},{"id":685,"depth":179,"text":686},"This document describes how to use Beam Shaders with CLI wallet running on a local network","md",null,{},true,"\u002Fdocs\u002Fdev\u002Fusing-beam-shaders-with-cli-wallet",{"title":5,"description":739},"docs\u002Fdev\u002Fusing-beam-shaders-with-cli-wallet","uoRcMDT8xA-9myIxT-rJ4NsKm7QFaHsUqP4PJ3Lk-fk",[749,753],{"title":21,"path":750,"stem":751,"description":752,"children":-1},"\u002Fdocs\u002Fdev\u002Fusing-beam-shaders","docs\u002Fdev\u002Fusing-beam-shaders","This tutorial describes using Beam Shaders on DAppnet",{"title":754,"path":755,"stem":756,"description":134,"children":-1},"Beam Documentation","\u002Fdocs\u002Fecosystem\u002Freadme","docs\u002Fecosystem\u002FREADME",1783006054343]