这里先展示一下DApp的效果,大家有了目标效果,就有了方向,也对我们接下来要做的工作有个心理准备,知道我们要做什么,可以做什么。
js4eos是用于开发智能合约的,其目的是取代了eosio和eoscdt,这就是为什么不用安装eosio的原因了,但是eos官方还是建议使用eos,开发命令基本一致。
从这里开始真正的Dapp 开发,Dapp开发分为前端开发和智能合约开发,其实者这两者的开发没有说明关系,完全可以相互独立,只是前端开发会调用智能合约里的action,所以我们的开发流程是先开发智能合约,再开发前端,其中智能合约是完全可以独立使用的,不过没有前端的话,只能用命令行,很不方便。
智能合约开发,就是使用eos和C++开发,这里为了教学方便使用了js4eos,具体的使用方法可以参考:https://github.com/itleaks/js4eos,官网都非常详细,我不做过多的说明。当然也可以查看:js4eos开发智能合约,是我整理的开发步骤。
智能合约开发还是很简单的,主要步骤就是:
以下是众筹合约的源码:
``` //2019-08-26 //众筹合约 //wuxy
#include <eosiolib/eosio.hpp> #include <eosiolib/asset.hpp>
using namespace eosio;
class loveoffering:public eosio::contract { public: loveoffering(account_name self):eosio::contract(self),_projects(self,self),_donations(self,self) {
}
/// @abi action
void version()
{
print("loveoffering version 0.1");
}
/// @abi action
void addproject(std::string projectName,std::string projectIntro,uint64_t projectToken)
{
require_auth(_self);
print("Add project: ",projectName);
print("Project Introduction: ",projectIntro);
for(auto &item:_projects)
{
if(item.projectName==projectName)
{
print("Same Project Name: ",projectName);
eosio_assert(true,"Same Project Name");
}
}
_projects.emplace(get_self(),[&](auto &p)
{
p.key=_projects.available_primary_key();
p.projectId=_projects.available_primary_key();
p.projectName=projectName;
p.projectStatus=1;
p.intro=projectIntro;
p.quantityWanted=projectToken;
});
}
/// @abi action
void modifyproj(std::string projectName,std::string param,uint64_t value)
{
require_auth(_self); //只能是合约用户修改
for(auto &item:_projects)
{
if(item.projectName==projectName)
{
if(std::string("quantityWanted")==param) //修改预期数量
{
_projects.modify(item,get_self(),[&](auto &p){
p.quantityReceived=value;
});
}
else if(std::string("quantityReceived")==param) //修改已经收到的数量
{
_projects.modify(item,get_self(),[&](auto &p){
p.quantityReceived=value;
});
}
}
}
}
/// @abi action
void offerlove(account_name donator,account_name to,asset quantity ,std::string projectName)
{
require_auth(donator);
print("Donate for ",projectName," by ",donator);
配置合约账号的eosio.code权限:
js4eos set account permission wuxytestnet1 active ‘{"threshold": 1, "keys": [{"key":"EOS5SCyJoqf1t114JAFPRW7AMbY6q2F1rVeTyFFbpfkuHg6nZwi7r","weight": 1}], "accounts": [{"permission":{"actor":"wuxytestnet1", "permission":"eosio.code"}, "weight":1}], "waits": []}’ owner -p wuxytestnet1@owner
js4eos set account permission wuxytestnet2 active ‘{"threshold": 1, "keys": [{"key":"EOS7v3ezbBTbLSJr8cRkeySGq8c1x7YouyVQin6k82e6unbtTvN3S","weight": 1}], "accounts": [{"permission":{"actor":"wuxytestnet1", "permission":"eosio.code"}, "weight":1}], "waits": []}’ owner -p wuxytestnet2@owner