以太坊的发展,虽然在感觉上还处于萌芽阶段,但已经取得了不错的进步。当我在年开始开发s智能合约和以太坊dapp时,t和w.是行业标准。......从阿蒂斯atis币官网的参考价值来看,也能给其他行业带来很多的启发。
以太坊的发展,虽然在感觉上还处于萌芽阶段,但已经取得了不错的进步。当我在年开始开发s智能合约和以太坊dapp时,t和w.是行业标准。这些都是很棒的工具,我对创建它们的人表示敬意。虽然这类工具还不是很完善,在使用过程中会存在少些b,但是并不影响我们的正常使用。有一些新的工具显然受到了这些第一组工具的启发,使开发过程变得更好。
我最近参加了一次黑客马拉松,在那我不得不重新回顾并了解事物的当前状态。我发现了很多很酷的工具,但是在文档上却没有太多关于如何使事情协同工作的工具。我决定写下我的发现并创建一个项目,该项目可以作为任何想要构建和测试智能合约和的人的起点。
b(t的替代工具)
b自称是“以太坊智能合约开发人员的任务管理者”。实际上,这意味着该工具将帮助您使用模板引导您的s项目,并为您提供测试智能合约并最终部署到以太坊区块链所需的所有框架。以前是使用t的 , , 和功能来引导s项目是标准过程。b吹捧的杀手级功能就是您的s合约恢复的堆栈跟踪。
e.(取代w.)
e.是一个j sdk用于与以太坊区块链进行交互。在开始开发时,我专门使用.很长一段时间。当我第一次尝试e时,我对它的设置如此简单以及api多么出色感到震惊。我敦促曾经使用w.的任何人尝试一下e。它具有使用钱包,帐户和合约的所有必需功能,还具有一些简洁的实用程序,例如abic,hdn,bn,以及用于十六进制字符串,以太单位和以太坊地址的各种格式化实用程序。
w (t 测试的替代工具)
以太坊w是用于以太坊智能合约的轻量级测试运行器。它内置了一些非常不错的测试工具,例如用于以太坊地址,哈希和bn的c匹配器,它是t原生的,并且与e的搭配非常好。
t
对我来说,t的绝对改变者是ide集成,它为您提供了所有类属性,对象键,函数参数等的自动完成功能。熟悉t之后,我再也不会回过头来编写原始j了。
我上面提到的所有工具的优点是,它们都可以与t一起很好地协作,并且一旦完成所有设置,开发人员的经验是非常棒的。
项目设置
现在开始做有趣的事情!在空文件夹中,通过运行 创建项目,在本练习的范围内,将值设置为多少并不重要。
安装b:
$ --- @/
引导b项目:
$
选择“创建一个空的..”选项(我们将使用与示例不同的堆栈,因此将创建自己的堆栈)。
$
yp
. ...
" " p y p"
p y y y.
p" "y"y"y
wb ..
? w ? …
c
? c ..
q
创建一些目录来保存您的项目文件:
$
设置t
安装所需的t依赖项:
$ --- -@/ @/
在项目根目录中创建文件:
{
"o": {
"": "",
"": "",
"": ,
"mi": ,
"d": ""
},
"": ["", ""],
"": [
".."
]
}
重命名b配置文件,并使其类型安全:
.. ..
{ bc }"@//";
: bc = {};
;
创建和编辑合约
现在,我们准备开始写代码了!
在/目录中创建一个名为.的非常简单的契约(编写时最新的版本是..):
..;
c {
= ;
ct( );
u() () {
c =+ ;
(c &; , "u ");
= c;
ct();
;
}
d() () {
c =- ;
(c &; , "u ");
= c;
ct();
;
}
}
在..中设置s版本(自动完成类型注释!):
b方便地捆绑了一个编译任务,因此编译是小菜一碟:
$
c...
c
b使用的s版本控制系统是令人惊叹的。 切换版本很容易,b会根据需要自动下载并安装s版本,您所需要做的就是在配置中进行更改。 为b团队提供了巨大的道具来进行设置!
用e和w建立测试环境
现在,我们将设置您的测试环境。
安装e,w和b插件:
$ --- @/--@/
将所需的类型定义添加到.中:
{
"o": {
"": "",
"": "",
"": ,
"mi": ,
"d": "",
"jm":
},
"": ["", ""],
"": [
"..",
"_/@/-//-..",
}
设置..以使用e插件:
{ bc, p }"@//";
p("@/-");
: bc = {
: {
: ".."
}
};
;
设置tc
tc是一个非常酷的工具,可为您的智能合约提供完整的输入界面。 设置完成后,我们可以在t中获得合同功能的类型提示!
在撰写本文时,b没有tc插件。 如果有人不先做,我打算很快就自己建一个!
首先安装库和e绑定:
$ -----
通过运行命令生成类型文件。 d定义了生成文件的存储位置,最后用引号引起来的字符串将提取构建目录中所有生成的合同:
$ _/ ----d'/*.'
现在在 /目录中,您应该看到生成了一些文件,其中一个是c..。 这是主要的合约类型文件,为我们提供了编写类型安全测试所需的信息!
编写和运行合约测试
编写测试大多遵循w语法,但有一个主要区别:.对象是从“ @/ ”库而不是-库导入的。
现在让我们编写一个测试。 在 /目录中创建一个名为.的文件:
{}"@/";
"";
{ c, w,}"-";
ca"./c.";
{ c }"./c"
.();
{} = ;
("c", () =&; {
//
= .;
//
[] = w();
//
: c;
e( () =&; {
=c(, ca)c;
c =.c();
//
(c)..();
(.)..a;
});
//
("",() =&; {
.u();
=.c();
()..();
.u();
=.c();
()..();
});
("",() =&; {
//
.d();
=.c();
()..();
});
});
编号行的说明:
.使用从b导入的
.从w功能获取钱包另外请注意,您可以使用此函数对任意数量的钱包进行结构分解,例如:
[, , ] = w();
.导入c类型,并将其用作在e中部署的变量的类型。
. w有一些有用的c匹配器,用于编写合同测试,例如bn匹配器和以太坊地址匹配器。 在这里查看所有内容。
.通过简单的测试来计数并确保c正常工作。
.注意的那些人将看到此测试将失败。
让我们开始运行测试!
$
注意到结果有异常吗?
a ,.
c
? ()
)
()
) c
:
e: vm e :u
c.d (/c.
这是您的s代码中的stack trace,其中显示发生还原的行号!!! 逐行注释合同以查看触发哪个还原的日子已经一去不复返了。
部署合约
经过测试后,循环的最后一步是部署合约。
第一步是将网络配置添加到..文件。 我们将为此使用,但您可以类似地添加任何网络(即):
{ bc, p }"@//";
da"-///a";
p("@/-");
infura_api_key = "";
rinkeby_private_key = "";
: bc = {
: {
: ".."
},
: {
: ""
},
: {
: {
: da.( =&; ({
: .,
k: .k
}))
},
: {
: `://./${infura_api_key}`,
: [rinkeby_private_key]
}
}
};
;
我将i用作以太坊节点端点,但是任何远程端点都可以使用。 如果您从未这样做,请从i获取api密钥。
现在,我们在脚本/文件夹内创建一个名为.的部署脚本:
{}"@/";
() {
=.c("c")
// i , ()
=.();
// t c will
.(.);
// t c
.(.t.);
// t not;
.()
}
()
.(() =&; .())
.( =&; {
.();
.();
});
超级简单的东西!
现在,只需运行脚本,我们就可以在控制台中看到我们的地址和交易哈希:
$ --/.
a ,.
ffdcebcd
我们可以转到e,查看该事务实际上已成功完成。
你有它! 完整的分步指南,用于设置类型安全的增压构建,测试,部署环境,并使用一些很酷的新工具。
收尾
为了使所有内容整洁无比,让我们制作一些方便的npm脚本。 将以下内容添加到您的.中:
"": {
"": " &;&; ",
"": "",
"": " &;&;--d--'/*.'",
"": ""
}
构建脚本执行合同编译并生成tc绑定,并且测试脚本运行合同测试。
附加:在上验证
b有一个超级方便的插件,可用于在e上验证合约,此任务比看起来应该的要复杂得多。 他们的工具可以为您处理拼合,这对于导入其他合约,使用oz库等的合约非常方便。
我们可以从安装插件开始:
$ --- @/-
然后,我们添加到.中,以确保我们的t环境了解此插件:
{
"o": {
"": "",
"": "",
"": ,
"mi": ,
"d": "",
"jm":
},
"": ["", ""],
"": [
"..",
"_/@/-//-..",
"_/@/-//-.."
]
}
接下来,我们将所需的配置添加到我们的..中(跳到e并从您的帐户页面获取api密钥):
{ bc, p }"@//";
da"-///a";
p("@/-");
p("@/-");
infura_api_key = "";
rinkeby_private_key = "";
etherscan_api_key = "";
: bc = {
: {
: ".."
},
: {
: ""
},
: {
: {
: da.( =&; ({
: .,
k: .k
}))
},
: {
: `://./${infura_api_key}`,
: [rinkeby_private_key]
}
},
: {
// t e api .
: "://-.",
// y api e
// o ://
k: etherscan_api_key
}
};
;
希望我们可以方便地保留上一步中的部署地址,因为这样我们就可以简单地运行此插件提供的内置任务:
$ - --- c -- feeeaba
a ,.
s feeeaba . w ...
s
易如反掌! 现在,在e上检查合约地址,您可以查看完整的合约源代码,并直接从网页上读写合约。
最后的想法
在整个使用过程中,b对其的使用给我留下了深刻的印象。 它已经具有大量很酷的功能,并且他们计划建造更多更酷的东西。 除了s堆栈跟踪,该团队还计划推出另一个急需的智能合约调试功能:.!。
我一定会密切关注这个项目,并尽我所能为其生态系统做出贡献。