蚂蚁区块链第11课 以租房积分管理系统为例讲透蚂蚁Solidity语言差异精要
免费提供最新落户政策及一对一落户方案
留学生/应届生/非婚子女 落户咨询
(蚂蚁区块链第11课 以租房积分管理系统为例讲透蚂蚁Solidity语言差异精要)
本文以住房租赁积分管理系统为例,给大家演示CLOUD左边ID右边E如何编译调试solidity智能合约,并以此为例,给大家分享以太坊SOL左边ID右边ITY跟蚂蚁区块链SOL左边ID右边ITY语言的差异点。
基于区块链智能合约的住房租赁积分管理系统旨在有效地服务于公众群体、市民,真正让那些为城市当前发展做出努力的人有房住、租得起,让那些为城市建设长远发展做出贡献的人有房产、买得起。为此,建立住房租赁积分制度,从住房租赁市场主体属性、政策激励、租赁行为三方面,运用区块链、大数据等前沿技术,建立科学、有效的住房租赁积分全生命周期管理机制,营造活力、健康、有序、可持续的住房租赁生态。
通过使用区块链平台作为底层数据支撑,确保隐私保护和数据不可篡改,达到公平、公正、透明的目的;利用积分决策引擎,结合住房租赁积分评价体系,产出应用于住房租赁场景的综合积分方案。该方案具备横向扩展性,在底层技术、数据不变的基础上,未来能够支撑经济信用积分、绿色生活积分等诸多积分体系的建设,从而扩展形成城市信用体系,应用于如医疗教育、金融借贷、绿色生活等诸多场景。
在住房租赁积分管理系统中,主要分为4种角色,分别是管理者、操作者、观察者以及市民。管理者、操作者、观察者是智能合约的操作人员,每个角色可以对应多名人员。市民是租赁积分智能合约服务的对象,是整个智能合约的核心用户。
角色操作权限
管理者是合约的超级管理员,能够对管理者、操作者以及观察者进行添加、删除、查询操作。操作者可以查询操作者信息。观察者可以查询观察者信息。
积分操作权限
管理者:具有积分奖励、积分查询、积分转移、积分违规扣除、积分权益兑换等积分操作权限。操作者:操作者是由管理者设置的积分操作角色,该角色可以是具体的人员也可以是系统服务,具有积分奖励、积分转移、积分违规扣除、积分权益兑换等积分操作权限。观察者:观察者是由管理者设置的积分查询角色,该角色可以是具体的人员也可以是系统服务,具有积分查询的操作权限。市民:市民是住房租赁积分系统的用户,是住房租赁积分系统的实际权益对象。
市民可以通过组织机构的租赁积分外部服务系统代理的观察者权限查看自己的积分状况。租赁积分外部服务系统会根据市民的合规表现,通过操作者的权限进行积分奖励或积分违规扣除。市民可以通过租赁积分外部服务系统代理的操作者权限进行积分权益兑换或积分转移操作。
租赁积分智能合约提供的服务方法包括积分奖励、积分查询、积分权益兑换、积分违规扣除、积分转移以及积分达到阈值后触发积分事件。
积分奖励(awardScore)
在市民租赁房屋的过程中,针对租赁的时间、租赁过程中产生的行为,为市民进行积分累计。
积分查询(queryScore)
市民可通过租赁积分外部服务系统代理的观察者权限查看自己的积分状况。
积分权益兑换(exchangeScore)
市民的积分达到指定阈值后可以享有相应的权益,如租房优惠、买房资格、落户资格等。
积分违规扣除(deductScore)
在市民租赁房屋的过程中,针对租赁过程中产生的错误行为,对市民惩罚性的扣减积分。住房租赁积分作为正向激励的积分体系,鼓励民众积极向上。对于积分主体的伪造资料行为,视情节严重程度扣减积分、取消积分资格以及收回积分对应的权益。
积分事件(SCORE_EQUITY_NOTICE)
当积分权益实时增加时,会触发积分权益检查。若积分达到了指定的阈值,则会产生相应的积分权益通知事件。通过外部服务系统通知到具体的市民。
积分转移(transferScore)
当市民因工作关系、家庭因素需要到其他城市生活时,可以将该城市的积分转移到目标城市的积分系统。为满足该合约的调用,目标合约需要有对应的积分奖励方法,且需要为发起合约提供操作权限,即将发起合约的地址设置为操作者或管理员。
参考《蚂蚁区块链第8课如何创建新的账户,获取私钥和identity标识?》文章获得辉哥需要的账号的解密私钥和identity。
角色定义如下,其中的私钥已被辉哥篡改过了,防止被误用。
因为目前(2019.04.06)蚂蚁BAAS系统存在一个BUG,导致ella等账号不能被用于智能合约部署,辉哥目前可使用的账号只有test002和duncanwang账号,辉哥在测试用例设计上做了一个小调整。
参考《蚂蚁区块链第5课如何配置Cloud左边ID右边E证书并进行Solidity智能合约调试?》完成智能合约的编译和部署,采用默认的test002账号。
【告警】在蚂蚁BAAS系统中,相同的合约名称只能使用一次。
如果该合约已部署,可按“已部署合约”根据已部署的智能合约名称来调用合约。
账号:test002
账号identity:0xd6b1f9e8a0da740faa41b78eba7be9214cf96e7fed20
创建LeasingScoreManager,其合约identity:0x64d555c5cd319fe7ddd2eb1741a5d3c4386fac168eded5044
(1)管理员test002做账户设置操作
<1>管理员test002部署合约(上海合约)后增加自己为管理员
functionaddAdmin(identityadmin)publiconlyAdmin
addAdmin(0xd6b1f9e8a0da740faa41b78eba7be9214cf96e7fed20)
结果:
txhash:0x842c8da9fa0c1f356fcb0317ce5aca2edd8cd1a80
log:
VAL左边ID右边(bool,uint8):true,0
USER_EXIST(bool,uint8):false,0
<2>管理员test002增加操作员duncanwang
functionaddCalculator(identitycalculator)publiconlyAdmin
addCalculator(0x4983bcbaf60b9c90dc9d9a0b38a8931aad9a444acaa2adcbc61c5e3e218c49e1)
结果:
txhash:0xe68c2fadba293e95f803e511ba46e9e111ef1e44e685a2df2e2269b
log:
VAL左边ID右边(bool,uint8):true,0
USER_EXIST(bool,uint8):false,1
<3>管理员test002增加观察员duncanwang
functionaddObserver(identityobserver)publiconlyAdmin
addObserver(0x4983bcbaf60b9c90dc9d9a0b38a8931aad9a444acaa2adcbc61c5e3e218c49e1)
结果:未记录。
账号切换到duncanwang账号:
(2)操作员duncanwang给市民dingheng增加100积分,理由:在马路上勇敢扶起一位摔倒的80岁老奶奶。
functionawardScore(bytes32player,uintscore,stringdescribe)
awardScore(“dingheng”,100,“理由:dingheng在马路上勇敢扶起一位摔倒的80岁老奶奶。”)
输出信息:
txhash:0x591daac5d038de4d9a3f437dd8aeeabbe3d5af2903ef122
log
VAL左边ID右边(bool,uint8):true,1
SCORE_OPERATOR(uint8,string):0,理由:dingheng在马路上勇敢扶起一位摔倒的80岁老奶奶。
SCORE_EQUITY_NOTICE(string,uint256,string):RentConcessions,100,Citizensenjoya90%discountonrentalhousing
(3)操作员duncanwang收到市民dingheng申请,理由:需要租房1年,花费80积分。
functionexchangeScore(bytes32player,uintscore,stringdescribe)publiconlyCalculatorOrAdminreturns(bool)
exchangeScore(“dingheng”,80,“理由:需要租房1年,花费80积分。”)
输出信息:
txhash:0xd7ce3c91a3b6e3cc4d6e4ad1bc05e5ba8dda81dbdc0b68a
log
VAL左边ID右边(bool,uint8):true,1
SCORE_OPERATOR(uint8,string):1,理由:需要租房1年,花费80积分。
(4)操作员duncanwang发现市民dingheng房租到期后,未及时退租。扣10个积分,电话催丁恒来退租。
functiondeductScore(bytes32player,uintscore,stringdescribe)publiconlyCalculatorOrAdmin
deductScore(“dingheng”,10,“理由:dingheng房租到期后,未及时退租。扣10个积分。”)
输出信息:
txhash:0x970e9ad61dfd9e264cd1bd12ca0d8426d1bbe9a178b0ec88d82d6a30ec2c5c99
log:
VAL左边ID右边(bool,uint8):true,1
SCORE_OPERATOR(uint8,string):2,理由:dingheng房租到期后,未及时退租。扣10个积分。
蚂蚁区块链合约平台基本支持Solidity所有的数据类型,但是对于一些用户编写的合约的输入参数类型并没有完全的支持,比如参数输入中二维数组的输入。同时,蚂蚁区块链合约平台提供了identity类型来标注每一个用户的身份,不支持原生Solidity中的address类型,identity的长度为32字节。
蚂蚁BAAS的identity就是账号名称的SHA256算法产生的32字节内容。
例如,在站长工具网站中输入账号名字duncanwang,获得其identity为0x4983bcbaf60b9c90dc9d9a0b38a8931aad9a444acaa2adcbc61c5e3e218c49e1
更多信息,可查看Solidity官网关于类型的文档(英文)。
蚂蚁区块链合约平台支持的Solidity语法基本与官方文档一致,具体语法介绍可参看Solidity官方文档(英文)。
本文主要介绍Solidity合约函数构造的常用权限关键字和修饰关键字。
蚂蚁区块链合约平台为合约开发者提供一些新的特性接口支持,包括对区块数据获取、交易数据获取、加密方法的支持。
block.blockhash(uintblockNumber)returns(bytes32):传入,返回块的哈希值。block.gaslimit(uint):系统中的gas最大值。block.number(uint):当前块高度。block.timestamp(uint):当前区块创建的时间戳。now(uint):的别名。
msg.data(bytes):用户的输入数据。msg.gas(uint):用户交易中的gas值。msg.sender(identity):用户交易中的发送方。msg.sig(bytes4):用户交易输入数据的前四字节。msg.value(uint):用户交易中的gas值。
蚂蚁区块链合约平台还支持查询交易哈希,示例如下:
可通过此方法获取当前交易的哈希值。
【告警】不支持TOKEN,不支持地址相关的转账函数了。
.balance(uint256):以Wei为单位的地址类型的余额。.transfer(uint256amount):向地址类型发送数量为amount的Wei,失败时抛出异常,发送2300gas的矿工费,不可调节。.send(uint256amount)returns(bool):向地址类型发送数量为amount的Wei,失败时返回false,发送2300gas的矿工费用,不可调节。.call(...)returns(bool):发出低级函数CALL,失败时返回false,发送所有可用gas,可调节。.callcode(...)returns(bool):发出低级函数CALLCODE,失败时返回false,发送所有可用gas,可调节。.delegatecall(...)returns(bool):发出低级函数DELEGATECALL,失败时返回false,发送所有可用gas,可调节。
蚂蚁区块链合约平台主要支持两种合约调用方式,分别为和。
类型的合约调用主要是通过调用其他合约代码获取某个方法的调用结果。同时,在执行该合约时,被调用合约的变量会被修改(即修改的是被调用合约的内存),调用执行成功时返回true,失败则返回false。如果被调用合约不存在,则返回执行调用合约的函数。
函数原型
请求参数
参数必选类型说明id是identity被调用合约左边ID右边data是string被调用合约方法签名args是var被调用合约方法传入参数
返回值
参数必选类型说明result是bool方法返回值,成功为true,否则为false。
类型的合约调用也是调用其他合约的方法,与不同的是,修改的是合约调用方的内存。此方法的主要目的在于让合约能够在不传输自身状态(如、)的情况下使用其他合约的代码。不支持传输value。
函数原型
请求参数
参数必选类型说明id是identity被调用合约左边ID右边data是string被调用合约方法签名args是var被调用合约方法传入参数
返回值
参数必选类型说明result是bool方法返回值,成功为true,否则为false。
(1)Solidity合约开发
(2)Solidity官方中文文档
声明:本站部分内容和图片来源于互联网,经本站整理和编辑,版权归原作者所有,本站转载出于传递更多信息、交流和学习之目的,不做商用不拥有所有权,不承担相关法律责任。若有来源标注存在错误或侵犯到您的权益,烦请告知网站管理员,将于第一时间整改处理。管理员邮箱:y569#qq.com(#转@)
推荐文章
- 上海居住证积分落户怎么办理
- 个体工商户如何申报积分落户?市人社局回复
- 新纪录96.9分!前滩东方悦澜刷新2022年上海入围积分新高
- 上海积分落户咨询
- 上海积分落户需要几年?2021如何迅速办理呢?
- 上海居转户资讯:深圳入户积分公示是怎样的
- 上海园区积分落户咨询服务
- 中央农村工作领导小组办公室农业农村部关于在乡村治理中推广运用积分制有关工作的通知
- 积分落户政策加分有哪些项?
- 上海户口落户政策(上海户口落户政策积分怎么算)
- 户籍改革终于开始了,城市落户两极分化,有人欢喜有人愁
- 闵行积分多少能落上海户口需要哪些材料2022已更新(今日/观察)
热门文章
- 深圳补贴:不限行业最高可领45万元,深圳创业扶持补贴办法
- 深圳市超生入户如何办理?
- 深圳机场:明起持广州佛山身份证的旅客需持核酸证明
- 2016年随迁入户的条件
- @深圳人,手把手教你各种情况如何提取公积金
- 深圳入户新政策即将实施,给非全日制学历提几个入户方案
- 本科学历,如何自己一步一步成功如深圳户口
- 两种人才引进方式入户深圳,一起来了解一下
- 东莞房价会涨吗?深圳缴存公积金也可贷款买东莞房
- 深圳户口在哪里登记结婚?
- 不想走弯路的赶紧看!这些方式可拿到深圳户口!现在就能办!
- 非深户就读深圳民办学校需要满足什么条件?深圳民办学校入学介绍
最新文档
- 在职研究生可以参与积分落户吗?
- 2022年积分入学政策发布,这些重大调整一定要知道!
- 调整了!上海落户积分细则2021政策有稍变
- 违反计划生育,提交承诺书是否可以申请积分落户?
- 无学历、无资历,也能申办120积分、落户上海的中级职称!
- 个人历年社保基数在线查询流程,你是否满足办理积分、落户的要求?一键查询!
- 必须要了解,疫情期间办理上海居住证、积分落户的新政策
- 崇明办理积分迅速服务热线(今年行情2022已更新)
- 上海积分落户期限
- 上海积分落户有哪些推荐
- “积分落户”政策访谈
- 虹口居住证积分落户条件多少钱(优势对比:2022已更新)
推荐文档
- 非全日制本科可以考211学校的研究生吗?如果有请问有那些学校?
- 毕业5年,专科,在上海工资12000,算很失败吗?
- 985毕业生涌入县城,被质疑抢饭碗!考公或许是一种尝试
- 大专毕业是该继续升本还是工作?
- 想买个网上查到的大专,交钱不考试2年半拿证是真的吗?
- 出彩艺校生 | 优秀毕业生司巧艺考入上海师范大学,她写给学弟学妹的一封信
- 2020年上海有哪些大学?一本二本三本专科
- 2022年安徽省马鞍山市博望区引进紧缺专业高校毕业生公告
- 毕业生的户口,档案到底有多大的用处?不看后悔死你..doc
- 2023专科生可以考研吗 有哪些问题需要注意
- 本科学校很普通不是211.985,北大法学硕士,有可能进国内顶尖律所吗?
- 北大硕士送外卖、火锅店只招985……去年毕业的名校生都去了哪?