设为首页
收藏本站
开启辅助访问
切换到窄版
登录
立即注册
中问网首页
我的收藏
站长博客
搜索
搜索
本版
帖子
用户
第一问答网
»
论坛
›
中问网
›
问答
›
【以太坊】关于以太坊智能合约在项目实战过程中的设计及 ...
返回列表
发新帖
【以太坊】关于以太坊智能合约在项目实战过程中的设计及经验总结 | 猿创征文
[复制链接]
11
|
0
|
2022-6-18 23:00:40
|
显示全部楼层
|
阅读模式
🔎这里是【以太坊】,关注我学习以太坊不迷路
👍如果对你有帮助,给博主一个免费的点赞以示鼓励
欢迎各位🔎点赞👍评论收藏??👀专栏介绍【以太坊】 目前主要更新以太坊,一起学习一起进步。👀本期介绍本期主要介绍关于以太坊智能合约在项目实战过程中的设计及经验总结1.智能合约的概述近几年,区块链概念的大风吹遍了全球各地,有的人觉得这是一个大风口,有的人觉得他是个泡沫。众所周知,比特币是区块链1.0,而以太坊被称为了区块链2.0,而区块链1.0和2.0最主要的差别就在于以太坊拥有了智能合约。其实,智能合约在1994年就已出现,计算机科学家和密码学家NickSzabo首次提出智能合约概念。早于区块链概念的诞生。Szabo描述了什么是“以数字形式指定的一系列承诺,包括各方履行这些许诺”的协议。虽然有它好处,但智能合约的想法一直未取得进展—主要是缺乏可以让它发挥出作用的区块链。从技术角度理解,智能合约其实是一个语法简单、指令集精简的图灵完备的语言,就像简化版的JavaScript。智能合约和其他的语言的区别主要在于,一方面,智能合约和代币体系完美结合,能够完成一系列价值转移,另一方面,智能合约会在所有节点统一执行,根据确定的输入、确定的代码保证确定的输出,也是所有节点状态一致性的保证。最后是智能合约都由有外部触发调用,不存在什么定时调用等。废话不多说,接下来,本人就从技术角度,来说说智能合约方面的设计。2.智能合约的分层设计2.1分层设计说明智能合约的分层设计模型主要是借鉴gitHub上的一篇名为《 浅谈以太访智能合约的设计模式与升级方法》文章的中心思想,其作者也是基于其多年的Java实战经验提出的一些智能合约设计思路。该文章有许多借鉴之处,但也存在许多坑点没有仔细考虑。文章的分层设计思路主要如下:“业务逻辑与外部解耦、业务逻辑与数据解耦”是Java设计模式的一种策略,也是其文章的主要思想。其实现方式主要将合约拆分为代理合约、业务控制合约、业务数据合约、命名控制器合约。其中代理合约是用于业务逻辑与外部Dapp的解耦,业务控制合约、业务数据合约和命名控制器合约是用于业务逻辑与数据的解耦。作者在设计时,也拆分了几种不同的场景,详见如下:控制器合约与数据合约1—>1:控制器合约与数据合约1—>N:控制器合约与数据合约N—>1:控制器合约与数据合约N—>N:此类情况可以拆解为上面三种情况的组合。2.分层设计实现关键点1)合约与合约之间的调用合约调用合约的实现主要有两种方式,第一种方式是可以通过 call、delegatecall、 callcode方法实现对其他合约的方法的调用,但是其弊端是使用存在安全性问题,而且不能获知被调用合约的执行结果,不建议使用。第二种方式,是通过在合约中“外部引用”被调用的外部合约进行实现。通过合约“外部引用”实现调用外部合约需要注意以下几点:合约对象中需要定义被应用合约对象的方法,否则合约中无法识别被应用对象,编译器会报错;被引用对象需要通过合约对象的设置外部合约方法将合约对象进行引入,注意需要引入外部合约对象后。2)合约与合约之间的转账合约可以接收转账,需要显示声明回调函数,并在回调函数上加payable进行修饰。合约与合约之间进行转账时,需要在合约中显示用send或者transfer进行合约之间的转账,合约与合约之间的转账将以内部交易的形式执行。另外,在显示转账的方法中也需要加payable修饰。pragma solidity ^0.4.2;contractTest{function TTest(address contractAddress,uint amount)payable { contractAddress.transfer(amount);
}
function()payable {
}}2.3分层设计的局限与问题1)被调用合约的方法的数据返回限制被调用合约在返回string/bytes等不定长类型时会存在问题。这种限制需要在设计被调用合约时要注意,在实际项目中业务逻辑合约和数据合约都属于被调用合约,故而其设计公共方法时需要规避string/bytes等不定长的限制问题。以下是一个调用失败的反例:pragma solidity ^0.4.2;contractTest{function TTest(address contractAddress,uint amount) { A a=A(contractAddress);//编译会报错 string temp=a.getString();
}}2)被调用合约的方法的返回参数长度限制被调用合约在返回定长的数据时,不能返回超过32位长度的数据,例如bytes33/uint33编译器将会提示错误。3)被调用合约结构体数据返回限制Solidity语言中,在编译器0.4.17版本之后,可以支持struct结构体的数据返回。在返回结构体的情况下,编码需要注意添加“pragma experimental ABIEncoderV2;”,需要注意的是结构体中也不能包含string/bytes等不定长数据类型,但是返回struct这种形式还处于试验阶段,稳定性安全性有待论证。(在0.4.17版本之前不能使用因为以前编译器没有把struct作为一个真正的类,只是形式上的组合在一起)pragma solidity ^0.4.17;pragma experimental ABIEncoderV2;contractTest{
struct MyStruct { int key; uint deleted; }function TTest() returns() { return MyStruct({key:int(1),deleted:uint(1)});
}}
回复
使用道具
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
千问
主题
0
回帖
4882万
积分
论坛元老
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
积分
48824836
加好友
发消息
回复楼主
返回列表
问答
热门排行
1
医生。你好。我的手指受伤缝线了。不能吃什
2
头上起疙瘩很痒反复挠有头皮
3
做爱后肚子疼一定是前列腺吗
4
腰椎盘突出吃什么药多没感觉做牵引疼痛晚上
5
酮康唑软膏含有激素吗对皮肤有副作用吗长
6
染发会有那些危害呢/
7
阴茎勃起困难,但是还是很想这事
8
我最近晚上睡觉腰酸腰痛
9
乳房疼痛还发烧怎么办
10
我是上个月19号做的药流,当时是胎囊排出
11
肺部ct 需要 打 造影剂吗?
12
霉菌阴道炎怎么治疗不复发要注意什么?
13
性交后为什么阴道出血?
14
湿热内盛,大便干,轻度耳鸣,耳屎有点湿,
15
新生婴儿心跳每分钟多少次
16
我今天早上起床半边脸是麻木嘴巴笑起来还有
17
青年静脉曲张是什么原因,abt下肢静脉曲
18
怀孕间吃了减肥药有没有影响
19
我今年39岁了,胃老是觉得不舒服,而且伴有口臭
20
左腿部疼痛发涨两天
21
铅屑进眼里该咋办
22
晕倒过10几分钟后,全身出汗是什么病情
23
我嘴唇经常是紫黑色的,是什么原因啊
24
为什么我一年四季皮肤都很黑。脸也是一
25
7周的孩子昨天打了精白破,今天烧到38.
26
l罗圈腿矫正器丝菲和戴奈米克哪个好哪个管用
27
我的阴道口旁边起了一个像水泡一样的痘痘是怎么回事
28
给宝宝用安抚奶嘴会吸进空气吗
29
癫痫反复发作,日常该注意什么
30
高血压,脑出血吃麝香心脑了片,管用吗有效
31
病毒性疱疹皮肤已愈合,为什么里面疼痛难忍
32
身上没碰到没撞到的就发青 还有发紫的
33
妇科问题,用过两种试纸后该怎么办?还需做
34
两颊突然起了很多包,还特疼,怎么回事啊
35
性别:男身高171体重58年龄21
36
持续服用减肥药四个月,身体会产生抗体吗?
37
吃六味地黄丸主要可以改善什么呢?
38
这几天小腹痛腰酸是怎么回事
39
霉菌性阴炎能怀孕么???
40
你好,我想问下,皮试过敏了不舒服怎么办
41
我今天和我男朋友做那个会不会怀孕
42
肺部少量积液,干咳无痰嘛,,无盗汗。
43
精力不能集中随时头昏,洗头是掉头发,
44
泥沙状胆囊炎
45
腿发软有太阳的时候我的腿就软有什么
46
四个月宝宝不明原因发烧38度,精神,饮食
47
1周8的小孩一动就流汗怎么办
48
我早上起来嘴苦,嘴臭,我食欲很好,怎么回
49
不行吃饭,吐 ,蛋白一个加号,肌酐一千三 ,吃药能减下去吗
50
钙片和什么东西一起吃能够很好的吸
51
老年人小腿肿胀用手压下去不能很快恢复请问
52
我在脸上搽了珍珠末,结果起了好多红痘,两
53
胎儿腹部肠管回声增强范围约29*27
54
黄褐斑怎么引起的?用什么药?
55
早期肝硬化腹水、胃出血
56
5年前被土墙压到,现在手臂痛,天气变化也痛
57
黑眼圈,想去做手术,请问做什么手术好
58
只是有时候会隐隐作痛,也吃药的,名字不清楚了,妈妈能否吃白果,
59
吃过这些药会对胎儿有影响吗
60
喝酒喝多了今晚 ,以前很少 ,想得到好的治疗
61
不知道我小孩睡觉总是冒好大的汗,请问这
62
头上老是出油是怎么回事
63
失眠头痛 时好时坏 指点怎么医治
64
10月10日 嗓子哑睡着时咳嗽,喝的化痰止咳的和急支糖浆
65
紫金追风药哪里有卖呢?
66
胃窦癌做手术后8号到现在一直打嗝;这两天
67
牙齿凸起,天包地
68
大腿局部出现无知觉现象
69
恩,谢谢,应该是月经不调吧。因为我是学生
70
阴部有点痒,白带有点多,发黄,还有异味
71
水痘快好时可以洗澡吗
72
老了记忆不好忘事吃什么
73
我有轻微的脚气,但是脚现在不痒了,而两只手的无名指指根却很痒
74
天天喝生冬瓜和苦瓜榨的汁能减肥吗?有没有
75
怀孕一个月检查发现内出血孩子能要吗
76
体温低 怎么治 谢谢
77
月经走了3,5天又来了是怎么回事
78
您好请问我服碘131两个月了现在整个
79
取环后可以吃独一味胶囊吗
80
请专家给点建议谢谢,每天应什么时候喝该中
81
月经两年不正常,,今年多半年没来了吃了黄
82
男孩子17岁以后不再长个子如何办?
83
一般怀孕了,会有什么反应
84
牡丹江能做引产么大概多少钱
85
坚持喝蜂蜜喝酸奶哪个更好?如果有点便秘的
86
晚上肛门瘙痒得很,洗了还湿润得很,能吃湿
87
小肚右下方有時會痛
88
检查出两个卵泡同房回怀双胞胎吗、
89
43天的小孩老是拉泡沫样的水样便,晚上很
90
专家你好,我妻子经检查是先天性角膜变性,
91
阴禳潮湿,皮下有疹,涂擦癣药无效,后服路雷他定
92
霉菌性阴道炎怎样才能之策地
93
我长期手淫频繁最近感觉阴茎疼痛。早泄。
94
先心病,动脉导管未闭左心扩大,肺动脉内径增宽
95
怀孕前应做好哪些准备,可以预防胎儿的健康
96
我患有痛风,属不属于代谢障碍性疾病。另外
97
房间隔缺损12mm
98
我是8月2日第一次月经来潮,8月26日有