合作关系,但没有合同,拖正规欠款合同范本不还要怎么处理,有账本

律师加盟热线:400-678-6088
手机找法网
您的当前位置:&&&&&正文
我方已完成所有合同条款。对方认账但欠款不还。
你好,有客户欠了我七万,所有合同内容我已完成,对方认账,但是说甲方未给他资金所以不还欠款。已经拖了两年了。怎么办?
提问者:wl3742***时间: 16:22:47地点:11个回答
欠的是你个人的还是你公司的,甲方不给他资金不是他抗辩的理由,欠你钱的是私人还是个人,如果是个人最好起诉,是企业可以发律师函也可以起诉。你说的所有合同内容你已经完成,意思是你已经履行完你的义务了吗?其次对方认账有没有对方签名的、借条或者其他证据(书面的或录音都可以)。
追问:是我们公司的。合同内容的完成是指我公司已经履行完我们的义务了。没有相关认账证据,但是可以和他在新的通话中录音取证。
回答:可以,但是公司和对方已经谈过了,对方不愿意还就起诉吧。
对方是个人还是公司
你好,建议您马上向法院起诉,您可以来电子咨询下,说明具体情况,让律师帮您分析下是否可以追回。
你好,建议尽快起诉
已经过了两年的诉讼时效,存在风险,尽快发催款函,要求对方进行账务确认和还款计划。
避免超过两年诉讼时效,尽快起诉
尽快起诉,债权有诉讼时效规定,切勿因丧失时效而丧失胜诉权。
建议尽快致函调解或者诉讼解决,避免过了诉讼时效,规避法律风险。
请尽快起诉
向法院起诉处理。。。
尽快起诉,过了诉讼时效就没戏了
你好,及时起诉。
查看其他7条回答
答:您好保留相关证据协商不成诉讼解决...
已帮助: 人
答:1、因数额较大,如无赠与的意思表示应认定为借款。2、如果你的女友在济南连续居住一...
已帮助: 人
答:您好,工程欠款纠纷起诉状应该包含有:
1.原告:姓名,性别,年龄,住所地,现居住...
已帮助: 人
答:您好!对方明显在拖延或耍赖,今年企业的形式也不太好!对这种行为,首先应审查已方的...
已帮助: 人
答:欠款:1、建议尽快向法院起诉要求还款,一旦超过了两年的诉讼时效,丧失胜诉权2、胜...
已帮助: 人
其他类似咨询
答: 是合法的。合同到期未续签的合同终止,但是单位应当支付经济补偿金。。温馨提示:建议
答: 1、诉讼请求基本合理,但字句格式及专业术语需修改;2、按合同相对性,建议列王某,
答: 有法律效力。
答: 劳动合同法及实施条例规定:用人单位和劳动者除了就(服务期和商业秘密)约定违约金外
答: 你好,当事人一方不履行合同义务或者履行合同义务不符合约定的,应当承担继续履行、采
法律百科专题
热门知识推荐
最新咨询回复
回答:你好,可以找劳动监察部门投诉或进行仲裁或起诉。
回答:你好,可以按离职前一年平均工资要求五个半月的经济补偿金,如果企业还有其他
回答:孩子抚养权需要争取。
回答:算夫妻共同财产。
回答:夫妻共同财产一人一半。
回答:如果治好了可以出院。
回答:收集证据,向法院起诉离婚。
回答:你好,建议去派出所户籍管理室问询。
回答:你好,当然可以更改。
回答:协商不成可以要求赔偿损失。
回答:一年之内都可以起诉维权。。。。
回答:申请劳动仲裁或收集证据向法院起诉,
回答:你好,可以办理退付的情况为:出国定居、在职死亡及达到法定退休年龄时缴费不
回答:协商不成可以收集在证据向法院起诉。
回答:尽快起诉离婚。
回答:若协商不成,你只有起诉解决了。
回答:申请劳动仲裁或收集证据向法院起诉。
回答:协商不成可收集证据向法院起诉。
回答:以交警的责任认定为准。
回答:先报警,让警方介入调查,如果确是暴力致死,属于刑事案家要由检察院提起公诉
回答:没有过时间。《工伤保险条例》第十七条职工发生事故伤害或者按照职业病防治法
回答:正常收费,省医院早已是12-15元不同的收费标准。。。。
回答:可以投诉或起诉的。。。
回答:如果不服处罚,可以申请行政复议。。。
回答:不是乱收费。。。。
回答:提前30天递交辞职书。。。
梁静飞律师
刘焕廷律师
陈奇斌律师
顾红霞律师
陈惠斯律师
程智华律师
郜云团队律师
为您推荐地区及合同纠纷专业律师、优质合同纠纷法律咨询、优质合同纠纷法律知识等内容,如果有法律纠纷寻求帮助,可以在线!
地区律师:
热门城市律师:
陕西律师:
合同纠纷专业律师:
合同纠纷法律咨询:
合同纠纷法律知识:https://blog.csdn.net/
https://static-blog.csdn.net/images/logo.gif
区块链技术爱好者
https://blog.csdn.net/qq_
https://blog.csdn.net/
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
在前不久节点财经对话孟岩访谈中,孟岩谈到了的陷阱及原则
之前孟岩提到过,很多区块链项目的“通证经济系统”90%以上都会跌到代币陷阱、央行陷阱、黑箱陷阱、乌托邦陷阱、赌场陷阱、通缩陷阱、软顶陷阱这7个陷阱中,那么如何规避这些陷进,看下面孟岩的分享:
我们正在研究区块链经济系统,因为是进行时,所以上述的总结不断的在变化。
现在升级为七个原则,八个陷阱和十一个模板了,八个陷阱的内容也发生相当的变化,主要是合并同类项,然后扩充了几个重要的陷阱。后面肯定还得变化。
完全讲一遍占用太多时间。我在这里就详细讲一下奇点陷阱吧, 因为很多系统都会陷入这个陷阱中。
所谓奇点陷阱,就是系统当中某个角色,token 只流入不流出,或者只流出不流入。现在好多来找我咨询的系统,他们的基金会就是这么个角色,只往外发 token,没有回收的设计,这就是奇点。
这个陷阱有什么危害呢?就是通证的价值得不到发行者的支撑,发行者没有责任和义务,只考虑享受红利,有极高的道德风险。
你看比特币,比特币里的矿工是一个重要的角色,是整个系统当中token 的发行源头,但是即使是矿工,他们也回收 token —— 接受比特币作为汇款手续费。这就避免了奇点陷阱。
以太坊也是一样,你运行智能合约,要交 gas 费,都是用 ETH 交的。好多人说烧掉了,gas 是烧掉了,ETH 可是被矿工回收了,这就形成了 ETH 回笼,避免了奇点陷阱。
各个国家的央行都将就一个货币回笼,中国央行搞公开市场操作,正回购,就是回笼人民币。
其实对于政府来说,最重要的回笼货币的手段就是税收。
你放出去的货币,必须允许老百姓拿这个钱来交税,如果你放纸币出去,收税却要求人家交黄金白银,你这个政府非垮不可。
前一段时间市场狂欢,投资者疯狂进场,什么经济系统,什么陷阱原则,无所顾忌,大量有奇点陷阱的项目上了交易所。
后面我们可能就要想得多一些了。
作者:qq_ 发表于
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
如何建立一个漂亮的通证经济的方法论?有没有能让创业者有章可循的模型或工具?
来听听前几天通证派孟岩的在节点财经对话时的回答:
这件事没有啥灵丹妙药,我们也在摸索。
我们有两个设计流程,贴两张图在这里,都是我们的内容:
经济系统设计步骤
经济系统设计步骤
这里头中心的问题还是角色分析和激励制度的设计。我们正在总结优秀的设计案例,把它们
总结为模板。现在总结了 11 个模板,其中有一个是我自己创造的,过一段时间会写几篇文章详细介绍一下。
我们有一个社区,规模很小,但都是一群认真要研究和实践通证经济的人在里面。我们挺认真的在研究这些设计方案,也在积极准备条件来实践。这些模型和方法论,基本上都是来自实践中的,没什么学术味道,属于“野路子”,但是比较新,比较跟得上。有兴趣的朋友是可以跟我们一起交流的。
我认为经济系统设计是很重要的。我们已经看到一些很牛的方案,如果能够落地,应该可以带来巨大的震动,对行业产生推动作用。
作者:qq_ 发表于
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
区块链技术持续升温,Dapp迅速成为焦点,未来区块链市场上新的蓝海。这么说当然不是空想出来的,而是从区块链市场的发展趋势中推断而来。区块链市场由最初的挖矿炒币到如今尝试投入行业应用,随着技术和应用模式的变化,衍生出DAPP的使用场景,2018年将会是DAPP爆棚的时代。
以上资源限时分享,先到先得,有兴趣的小伙伴加微信(id:pdj107)免费领取。
作者:qq_ 发表于
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
数字签名(签名)则是根据消息内容生成一串 “只有自己才能计算出来的数值”, 因此数字签名(签名)的内容是随消息的改变而改变的。
生成消息签名:
根据消息内容计算数字签名的值,这个意味着 “我认可该消息的内容”。、
验证数字签名:
检查该消息的签名是否真的属于Alice,验证结果可以是成功或者失败,成功意味着这个签名属于Alice,
失败意味着这个签名不属于Alice的。
数字签名对签名密钥和验证密钥作了区分,使用验证密钥是无法生成签名的。
这一点至关重要。
签名密钥只能由签名的人持有,而验证密钥
则是任何人需要验证签名的人
都可以持有!
数字签名中也同样会使用公钥和私钥组成的密码对,不过两个密钥的用法和公钥密码
是相反的,即用私钥加密x相当于签名,而公钥解密则相当于验证签名。
数字签名意义
只有持有该密钥的人才能够生成的消息。
这样的信息一般称为认证符号(authenticator),消息认证码也是认证符号的一种。
数字签名也是通过私钥进行加密来
产生认证符号的。
作者:qq_ 发表于
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
日,“破界·颠覆”猎云网2018年度区块链产业峰会在北京千禧大酒店隆重举行,此次峰会由猎云网、猎云财经主办,锐视角、 猎云资本、AI星球、Kcash、威客星球和创头条协办。
柏链道捷CEO、CSDN副总裁、孟岩在此次峰会上发表主题为“区块链经济系统的演进和趋势”的专题演讲时表示,区块链最大的应用就是通证,通证经济主要研究的是,在一个或者一组通证所构成的社群之内,它的制度如何设计,经济制度如何设计和治理制度如何设计。
它本质上要解决的问题是一个社群通过代码或者通过一些有效的治理组织,决定什么样的行为要受到实时的激励,什么样的行为要被实时的惩罚,怎样确保激励和惩罚是公平、公正、透明和实时。
基于通证和未来公链共同体的出现和支撑,一种全新的商业生态和模式将会出现,它和传统商业模式差距较大,它是一种新型的经济体治理模式。在商业领域里人们正在迎来这样一个时刻,就是包容性的制度正在进入商业中去,然后改变甚至颠覆现有的商业模式,甚至把商业变成一种治理模型。
孟岩坚信包容型制度能长期可持续地发展。从现在一些交易所的实践,包括一些人们平时已经接触到一些社群用通证经济方式运作。研究发现它们一旦采取新的模式,包括公平的记帐、公平的激励和公开的规则,就能迅速产生摧枯拉朽的变化。
在演讲完后,孟岩在接受猎云财经的采访时透露,目前正在进行通证经济系统评级的设计和评析,目前已总结出七个原则、八个陷阱和十一个模板,包括四次分配和一个螺旋,当前数量还在不断地变化,处于研究和探讨当中。孟岩还透露确定的通证经济系统评级将在年内将会和大家见面。
孟岩认为,其研究的通证经济系统的评级目前在中国是一流的,在国际上也不落人后。孟岩还解释自己不做数字货币评级的原因是,目前的数字货币评级中包含了非理性的投机和炒作的成分,对币圈始终保持一定的距离,币圈中的一些文化未来是要被革除的。
他还在采访最后高度评价最近大热的Fcoin交易所的分享制度,赞扬Fcoin创始人张健是在通证经济时代按照通证规则和玩法做交易所的第一人,虽然不确定张建的分享制度是否彻底。随后孟岩提到张健的分享制度存在政策风险,和现有的监管政策有不兼容的地方。未来各行各业可能还会出来更公正,更合理的分配机制,未来竞争的优势将会是谁能够为用户提供更加公正、更加合理的利益分享制度,但这个过程必定不是一帆风顺的。
作为国内通证派代表的孟岩将自己的理论和实践结合,亲自研发的课程:前两期场场爆满,第三期现在开始报名了,感兴趣的小伙伴不要错过,可关注微信公众号(id:pdjedu)了解详情。
作者:qq_ 发表于
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
EOS智能合约存储实例
智能合约中的基础功能之一是token在某种规则下转移。以EOS提供的token.cpp为例,定义了eos token的数据结构:typedef eos::token
struct Transfer{
AccountName
这样,在转账时,调用currency.cpp中实现的api传入Transfer结构表明想要转账的token数量:
MeToYou.form=N(Me)
MeToYou.to=N(You)
MeToYou.quantity=Tokens(100);
当eos合约处理接受到这样的请求时,会调用相关流程完成对应token的处理。
void apply_transfer(const Transfer& transfer){
auto from=getAccount(transfer.from);
auto to =getAccount(transfer.to);
from.banlance-=transfer.
to.banlance+=transfer.
storeAccount(transfer.from,from);
storeAccount(transfer.to,to);
最终存储结果将保存到沙盒的内存中。
EOS智能合约数据库的持久化
在沙盒机制中,当我们运行一个合约、发行一个代币时,EOS为我们提供的一些基础运行框架。其中最重要的两个:第一,实现了平台无关的account存储机制;第二,提供了一个account间结算的业务平台。同时EOS会将沙盒里面的数据存储接口存储在具体物理设备上来,实现数据的持久化。
在chain/wasm_interface.cpp中,对接了wasm的context,并使用context获取到db.php中实现的数据存储接口,然后将这些接口实现到了message_handing_contexts.hpp中。
这样后面的处理流程就比较清晰了。当合约在读取数据时,将调用message_handing_contexte.hpp中的load_record接口:
template&typename IndexType,typename Scope&
int32_t load_record(Name scope,Name code,Name table,typename IndexType::value_type::key_type* keys,char* value,unit32_t valuelen){
const auto& idx=db.get_index&IndexType,Scope&();
= load_record_tuple&typename
IndexType::value_type,Scope&:get(scope,code,table,keys);
=idx.lower_bound(tuple);
上面load_record代码中,调用了db.get_index方法,此处的db也就是chainbase/chainbase.hpp 中实现的database类。database中使用了boost的managed_mapped_file,实现了对数据的存储和读取的接口。
在EOS提供的插件plugins/chain_plugin/chain_.php中提供了一种从数据库读取table的方法
get_table_rows_result
get_table_rows(
get_table_rows_params&params)
利用这个开发者就能读取到合约目前的所有状态,开发自己的钱包了。
EOS.IO发布的版本已经提供了开发智能合约的基本API,本次从数据库到持久化方法介绍了EOS智能合约的数据库API。
基于这些API,开发者就可以开发出自己的钱包。
作者:qq_ 发表于
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
安装以太坊客户端
以太坊客户端有很多版本,我安装的是Go-ethereum,因为对geth的命令解释的比较详细。
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
安装完成后输入
会出现geth的各种操作命令说明,包括以太坊、账户、网络配置、虚拟机和GAS PRICE。
安装成功后直接启动,就可以链接到公有链上,下面开始建立自己的私有链。
sudo apt-get install vim -y
vim piccgenesis.json
把以下参数的配置复制进来。
"nonce":"0x0042",
"mixhash":"0x0000",
"difficulty": "0x4000",
"alloc": {},
"coinbase":"0x0000",
"timestamp": "0x00",
"parentHash":"0x0000",
"extraData": "SecBroBlock",
"gasLimit":"0x0000ffff"
解释一下区块里面的参数,从参考文献里直接截图过来的,大家如果觉得不是太准确,可以去参考官方文档,都在下面的参考文献中。
下面开始初始化和启动节点
启动私有链节点所需要的参数
切换到eth目录中
获取当前目录的路径
basepath=$(cd `dirname $0`; pwd)
创建数据存放的目录路径和初始化创世块
--datadir "$basepath/chain" init piccgenesis.json
启动私有链,secbro etherum是区块链名字随便取,我直接复制的参考文档里的,但是自己的路径要改,-dev是开发者模式。
geth --identity "secbro etherum" --rpc --rpccorsdomain "*" --datadir "/home/csy/eth/chain" --port "30303" --rpcapi "db,eth,net,web3" -- networkid 95518 console --dev
看到以上输出就是成功了,然后打开新终端输入命令
geth --dev console 2&& file_to_log_output
可以看到以太坊节点启动的画面,在这里面就可以进行账户的创建,挖矿,交易了。
作者:qq_ 发表于
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
eosio.token智能合约
在eos目录中自带的合约中,有一个eosio.token智能合约,这个智能合约的功能是为账户发放token,token可以用来转账操作。
在eos私有节点操作中,我们通常是一个合约对应一个合约账户,并且一个账户中只能部署一个智能合约。如果在同一个账户部署多个合约,那么最后部署的合约会覆盖掉之前的合约。
创建用来部署合约的账户
cleos create account eosio eosio.token EOS8kTP7dWruLSZidZfRkcaQiwKPS1eApwnojeBo6QnaVKt2rMGMM EOS8kTP7dWruLSZidZfRkcaQiwKPS1eApwnojeBo6QnaVKt2rMGMM
executed transaction: 46c68f270dfceb36ce2270a6bad89caa3a3bcfbb1 352 bytes 102400 cycles
# eosio &= eosio::newaccount {"creator":"eosio","name":"eosio.token","owner":{"threshold":1,"keys":[{"key":"EOS8kTP7dWruLSZidZfRk...
把eosio.token合约部署到eosio.token账户上
cleos set contract eosio.token ../eosio.token
Reading WAST/WASM from build/contracts/eosio.token/eosio.token.wast...
Assembling WASM...
Publishing contract...
executed transaction: 5a0305bcab99b9d9fd55bb0a0e60c2d79f4d61cd1ab 8288 bytes 2200576 cycles
# eosio &= eosio::setcode {"account":"eosio.token","vmtype":0,"vmversion":0,"code":"e7f7f7f7f00...
# eosio &= eosio::setabi {"account":"eosio.token","abi":{"types":[],"structs":[{"name":"transfer","base":"","fields":[{"name"...
cleos push action eosio.token create '[ "eosio", ".0000 EOS", 0, 0, 0]' -p eosio.token
executed transaction: b6ffc0fbb62ff4c23b7d24b8b55a34bf0c74e7c710b18d16af326b939ae9ecfd 248 bytes 104448 cycles
# eosio.token &= eosio.token::create {"issuer":"eosio","maximum_supply":".0000 EOS","can_freeze":0,"can_recall":0,"can_whitelis...
为账户发放token
cleos push action eosio.token issue '[ "lilei", " EOS", "" ]' -p eosio
executed transaction: 8e33d754aa7ddc76ab9a1bffada69e6da71d 248 bytes 124928 cycles
# eosio.token &= eosio.token::issue {"to":"lilei","quantity":" EOS","memo":""}
# eosio.token &= eosio.token::transfer {"from":"eosio","to":"lilei","quantity":" EOS","memo":""}
&& transfer
# eosio &= eosio.token::transfer {"from":"eosio","to":"lilei","quantity":" EOS","memo":""}
# lilei &= eosio.token::transfer {"from":"eosio","to":"lilei","quantity":" EOS","memo":""}
cleos get table eosio.token lilei accounts
"rows": [{
"balance": " EOS",
"frozen": 0,
"whitelist": 1
"more": false
可以看到,lilei的token已经到账了。如果他真有
1000个EOS,那他就可以出去买买买了。
作者:qq_ 发表于
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
solidity高级理论(三):时间单位与view
关键字:时间单位、view、Gas优化
solidity使用自己的本地时间单位
变量 now 将返回当前的unix时间戳(自日以来经过的秒数)。
注意:Unix时间传统用一个32位的整数进行存储。这会导致“2038年”问题,当这个32位的unix时间戳不够用,产生溢出,使用这个时间的遗留系统就麻烦了。所以,如果我们想让我们的 DApp 跑够20年,我们可以使用64位整数表示时间,但为此我们的用户又得支付更多的 gas。
Solidity 还包含秒(seconds),分钟(minutes),小时(hours),天(days),周(weeks) 和 年(years) 等时间单位。它们都会转换成对应的秒数放入 uint 中。所以 1分钟 就是 60,1小时是 3600(60秒×60分钟),1天是86400(24小时×60分钟×60秒),以此类推。
下面是一些使用时间单位的实用案例:
uint lastU
function updateTimestamp() public {
lastUpdated =
function fiveMinutesHavePassed() public view returns (bool) {
return (now &= (lastUpdated + 5 minutes));
view关键字
当用户从外部调用一个view函数,是不需要支付一分 gas 的。
这是因为 view 函数不会真正改变区块链上的任何数据 - 它们只是读取。因此用 view 标记一个函数,意味着告诉 web3.js,运行这个函数只需要查询你的本地以太坊节点,而不需要在区块链上创建一个事务(事务需要运行在每个节点上,因此花费 gas)。
所以,在查询数据的时候最好放在带有view的函数中。
注意:如果一个 view 函数在另一个函数的内部被调用,而调用函数与 view 函数的不属于同一个合约,也会产生调用成本。这是因为如果主调函数在以太坊创建了一个事务,它仍然需要逐个节点去验证。所以标记为 view 的函数只有在外部调用时才是免费的。
作者:qq_ 发表于
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
6月9日,学友们期盼已久的《区块链通证经济系统设计》课程在北京如期开课,现场座无虚席、气氛热烈。经过两天紧张而充实的实战学习,在课程结束之时,学友们已经亲自利用课程所学的核心模板工具设计出了学友社区block zero的通证经济系统雏形。
两天学习就能设计出一个区块链通证经济系统?
怎么做到的?让小道带您回顾一下:
明原理,打基础
在第一天的课程中,孟岩老师结合国际上业内专家的主流观点,深刻地指出区块链通证经济系统的重要性,强调区块链通证经济系统设计的终极目的在于搭建一个经济体并通过一套激励制度和治理结构的设计使其持续运转和不断繁荣。
经济系统设计需要具备坚实的理论基础,孟岩老师首先从宏观经济角度入手,解读其对区块链发展的影响以及对区块链通证经济系统设计的指导和启示。学友们听的仔细,悟的真切,感受颇深,纷纷刷屏表达自己的激动和兴奋。
带着这样的目标,孟岩老师深入浅出地讲解了宏观经济相关理论及其对区块链经济系统设计的指导和启示,并以数据实例分析说明宏观经济政策及走势对区块链经济发展的影响。他还通过对诸如寻租理论、分利集团理论、加强市场型政府理论等的讲解,指出区块链经济系统设计的正确方向是构建一个包容型的经济制度和治理结构。
明确方向之后,孟岩老师详细阐述了他关于通证的基本理论及区块链通证经济系统分析与设计的框架模型和原则、陷阱——即“四次分配一螺旋”框架、通证经济系统设计的七个原则、八个陷阱。其中,诸如原点价值原则、价值回路原则、奇点陷阱、索马里陷阱等都是孟岩通过长期思考之后的新的认知输出,这使得孟岩创新提出的区块链通证经济系统设计框架模型更加完善和强大。
为了使学友们更好地理解和应用“四次分配一螺旋”、通证经济系统设计“七个原则、八个陷阱”等理论框架,
由蔡佳兴老师和孟岩老师一同对比特币、以太坊、EOS、Kowala、Ardor、filecoin等7个典型的区块链经济系统,按前述分析框架进行了深度解读和分析。
在为学友做示范解读的基础上,为了调动学友们的学习参与感,课堂上还以分组讨论的形式,让大家竞争PK,研读steemit、maker、storj等区块链项目白皮书,
并按照“四次分配一螺旋”、“七个原则”、“八个陷阱”等框架工具,对其进行分析和解读。
在学友们的互动学习过程中,为了更好的使学友们体验、感悟经济系统设计的神奇,在授课模式上也进行了精心设计。
课程的组织过程本身就被设计成为一个学员可参与的经济活动过程,在课前教学服务人员给各个小组“空投”了一定量的筹码,
供学友们在参与学习活动的某些环节中使用。课程结束后,筹码都将映射为学习社群的token。
工具化模板化助力学以致用
两天的课程信息量是足够大的,干货是足够多的,如何快速在各自的业务场景中应用并快速落地成了学友们共同关注的问题。
而这正是本次课程的精华部分,孟岩老师在长期研究的基础上,基于其提出的框架模型,为大家精心总结了11个区块链经济系统设计的模板,
涉及单币结构、双币结构、多币结构的区块链项目,可应用于基础设施、区块链应用等业务范畴。
在最后,孟岩老师还专门介绍了其自创的M模式通证经济系统设计模板,据其透露,
该模式已经被应用在柏链道捷孵化的“激励宝”项目中,该项目于6月10日还参与了在香港举办的EOS马拉松活动,受到广泛关注。
实战让成果快速转化
学友们既有了宏观视野引导和基础理论的思想资源,又有了模板化的工具,个个都跃跃欲试,想大展一番身手。
于是,在柏链道捷执行总裁冯录先生倡议下,大家决定亲自参与共同打造一个由所有学友参与的新型社区——block zero,
该社区基于区块链搭建旨在促进多方多角色参与的价值共同体,集学习、咨询、孵化、投资等业务于一体,促进跨界协作,实现多元价值及其最大化。
期待二期通证经济系统设计课程
作者:qq_ 发表于
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
solidity高级理论(二):Gas
关键字:Gas、结构体、节省小技巧
在Solidity中,用户想要执行DApp都需要支付一定量的Gas,Gas可以用以太币购买,所以,用户每次使用DApp都会发费以太币。
一个 DApp 收取多少 gas 取决于功能逻辑的复杂程度。每个操作背后,都在计算完成这个操作所需要的计算资源,(比如,存储数据就比做个加法运算贵得多), 一次操作所需要花费的 gas 等于这个操作背后的所有运算花销的总和。
由于运行你的程序需要花费用户的真金白银,在以太坊中代码的编程语言,比其他任何编程语言都更强调优化。同样的功能,使用笨拙的代码开发的程序,比起经过精巧优化的代码来,运行花费更高,这显然会给成千上万的用户带来大量不必要的开销。
gas是计算费用的方式。不过,这些费用仍然是以ether计算,这与gas不同。gas成本是工作量,如劳动时数,而gas价格就像您为完成工作付出的小时工资。 两者的组合决定了您的总交易费用。如果您的gas价格太低,没有人会处理您的交易。如果您的gas价格不错,但交易的gas成本超过预算,交易失败,但仍然被打包进区块,劳动者工作了,您不会获得退款。这样确保没有任何东西永远运行,而且人们会对他们运行的代码注意一点。 它使矿工和用户都能安全避免错误的代码!
节省Gas的小技巧
其实很多人觉得,使用uint变种会节省gas,如uin8,其实并不是,即使使用uint8,solidity还是会为它保留256位的存储空间。
例如,使用uint8而不是使用uint256,消耗的gas是一样的。
结构封装(Struct packing)
有一种办法可以节省gas,那就是把uint绑定到struct里面。
如果一个struct中有多个uint,则尽可能使用较小的uint,solidity会将这些uint打包在一起,从而占用较小的存储空间。例如:
struct da{
strcut xiao{
da normal = da(10, 20, 30);
xiao mini = xiao(10, 20, 30);
这样就符合大家的逻辑了,使用uint32比uint256节省了很多的gas。
所以,当 uint 定义在一个 struct 中的时候,尽量使用最小的整数子类型以节约空间。 并且把同样类型的变量放一起(即在 struct 中将把变量按照类型依次放置),这样 Solidity 可以将存储空间最小化。例如,有两个 struct:
uint32 uint32 和 uint32 uint32
前者比后者需要的gas更少,因为前者把uint32放一起了。
作者:qq_ 发表于
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
去年11月份的一段时间,Ethereum网络突然变的特别拥堵,原因是兴起了一款以太坊养猫的Dapp游戏,超级可爱的猫形象,再加上配种,繁殖和拍卖等丰富的玩法,风靡了币圈。 一时间币圈大大小小的人都在撸猫,以太坊网络不堪负荷,最近更是爆出消息,一只猫可以拍到8w 多人民币。基于以太猫,国内也兴起了一整浪潮,后续又出款了很多的类似的游戏,网易招财猫,百度莱茨狗和加密鱼等等,不过玩法套路都是差不多。
实际上,这款游戏的核心是以太坊的智能合约,也是第一款基于智能合约的游戏,这款游戏的核心是基于ERC721的。
基于以太坊养猫,我们可以先理解一下ERC721 的概念。
ERC是以太坊代币标准的缩写。常见ERC标准有ERC20, ERC721和ERC825。
ERC20是标准Token接口,这个规定了Token的基本功能, 方便第三方使用。在一些开源组织的工作推动下,ERC20的标准已经简单到能5分钟
发行一个ERC20的Token。ERC721是针对不可置换Token的智能合约标准接口,(non-fungiletokens)不可置换Token简称NFTs,操作标准
API的实现方法。以太坊养猫中的猫都是ERC721的Token,每只猫都是拥有不一样基因的猫, 归根到底也就是拥有不一样属性的Token。
猫的编号其实也就是Token的编号,猫的基因也就是Token的属性。
撸猫归根到底其实是改变ERC721标准下的Token属性,从而达到每个猫都具有不一样的基因。
ERC20 与ERC721 标准的区别
首先且先说ERC20,他是基于同质化的代币,是可置换的,意味着所有的Token直接没有区别,、所有Token都是一样的,我有两个ERC20的Token,并不会因为我花的方式不一样而不一样。
然而ERC721 的代币是基于是非同质化的,不可互换的Token,简单理解为每个Token都是独一无二的。也就是说ERC721的每个Token都拥有独立唯一的tokenId编号。像在CryptoKitties中的猫都被赋予拥有基因,每只猫的基因都是不一样的,零代猫是最有收藏价值的。另外在某些情况下, 某些猫的属性比较罕见, 也会受到追捧。
基于ERC20 和基于ERC721 应用场景.
ERC20 是基于标准的代币协议,它能够用于网站流通价值的积分,虚拟币等等.ERC721的NFT让数字资产变得更有收藏价值,尤其是在加密货币收藏和网络游戏领域拥有巨大的潜力,用ERC20 的代币用于游戏的流通价值积分,用ERC721代表网站的虚拟装备,独一无二的道具等等,设计出基于双重代币游戏模型。
ERC20 和ERC721 的具体接口实现.
基于ERC20 的代币实现
contract ERC20{
function totalSupply() constant returns (uint totalSupply);
function balanceOf(address _owner) constant returns (uint balance);
function transfer(address _to, uint _value) returns (bool success);
function transferFrom(address _from, address _to, uint _value) returns (bool success);
function approve(address _spender, uint _value) returns (bool success);
function allowance(address _owner, address _spender) constant returns (uint remaining);
event Transfer(address indexed _from, address indexed _to, uint _value);
event Approval(address indexed _owner, address indexed _spender, uint _value);
基于ERC721 的接口标准
contract ERC721{
function totalSupply() public view returns (uint256 total);
function balanceOf(address _owner) public view returns (uint256 balance);
function ownerOf(uint256 _tokenId) external view returns (address owner);
function approve(address _to, uint256 _tokenId) external;
function transfer(address _to, uint256 _tokenId) external;
function transferFrom(address _from, address _to, uint256 _tokenId) external;
event Transfer(address from, address to, uint256 tokenId);
event Approval(address owner, address approved, uint256 tokenId);
作者:qq_ 发表于
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
EOS记事本智能合约
本次分享的内容是一个记事本合约,调用合约中的写入动作可以将文本和作者保存到数据库中,通过记事本合约来学习EOS智能合约数据存储当中的主键自增。
记事本合约必须要有的写入文本action,用来存储记录文本和记录作者。
记事本中同样需要有删除记录的action,用来删除记录信息。
#include &eosiolib/eosio.hpp&
#include &string&
using namespace
using std::string;
class record : public eosio::contract {
struct note {
auto primary_key() const { return }
typedef multi_index&N(notes), note&
using contract::
void write(account_name author, string text) {
require_auth(author);
print("Hello, ", name{author});
notes nt( _self, _self );
uint64_t noteId;
nt.emplace(author, [&](auto &n) {
n.id = nt.available_primary_key();
n.author =
noteId = n.
print("----noteId = ", noteId);
void remove(uint64_t id) {
notes nt( _self, _self );
auto it = nt.find( id );
eosio_assert( it != nt.end(), "the id not found" );
require_auth(it-&author);
nt.erase( it );
EOSIO_ABI(record, (write)(remove))
合约涉及数据库操作部分
在表中增加记录:emplace
删除一条数据:erase
查询记录:find
主键自增:available_primary_key
其中主键自增非常重要,不写主键自增会导致无法存入多条记录。
合约调用演示
调用write动作
$ cleos push action note write '{"author":"user","text":"This is my first diary"}' -p user
executed transaction: ab59fc4ed5bf4dd48cbcaea81ca3fdc0c99b6fed7
&& Hello, user
warning: transaction executed locally, but may not be confirmed by the network yet
调用成功会返回信息,其中noteId是记录的id,在删除记录的时候需要用到。
cleos get table 查询表
$ cleos get table note note notes
"rows": [{
"author": "user",
"text": "This is my first diary"
"author": "student",
"text": "my name is student!"
"author": "miaomiao",
"text": "my name is miaomiao"
"more": false
调用remove动作
删除时进行了授权限制,每个账户只能删除自己的记录,无法删除其他账户的记录
错误的授权:
$ cleos push action note remove '{"id":2}' -p user
Error 3090004: missing required authority
Ensure that you have the related authority inside your transaction!;
If you are currently using 'cleos push action' command, try to add the relevant authority using -p option.
Error Details:
missing authority of miaomiao
正确的授权:
$ cleos push action note remove '{"id":2}' -p miaomiao
executed transaction: 51eb63f0fdb7d5df9bc144ee1fedafd
$ cleos get table note note notes
"rows": [{
"author": "user",
"text": "This is my first diary"
"author": "student",
"text": "my name is student!"
"more": false
在编写记事本合约时为了找到让主键增加的方法差了很多资料,也走了很多弯路。最后发现其实就是一行代码就能解决的事情。。
作者:qq_ 发表于
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
EOS智能合约授权限制和数据存储
在EOS合约中,调用合约需要来自账户的授权,同时还要指定需要调用的动作。当然,有的合约并不是所有账户都可以调用的,这就需要用到授权限制。接下来我们就来看看如何限制合约的授权账户。
为了更好的演示,写了一个下课和吃饭的智能合约小例子。这个合约有两个动作,下课和吃饭。教师账户可以调用下课动作,学生账户可以调用吃饭动作。教师调用下课动作后,学生才能调用吃饭动作。接下来我们来看代码:
teacher.hpp
头文件teacher.hpp定义了两个动作,over是class over 下课动作,eat是吃饭动作。
#include &eosiolib/eosio.hpp&
#include &eosiolib/print.hpp&
class teacher_stu : public eosio::contract{
using contract::
teacher_stu( account_name self ) :
contract( self ) {}
void over(account_name teacher);
void eat(account_name student);
static uint64_
struct mshare {
uint64_t start = 0;
uint64_t primary_key() const { return }
typedef multi_index&N(mshare), mshare&
EOSIO_ABI( teacher_stu, (over)(eat))
teacher.cpp
teacher.cpp中主要是over和eat动作的实现。
#include "teacher.hpp"
uint64_t teacher_stu::id = 1;
uint64_t start = 0;
void teacher_stu::over(account_name teacher) {
require_auth(teacher);
print("teache:Class over!");
mshares mshare_table(_self, _self);
start = 1;
mshare_table.emplace( teacher, [&]( auto& mshare ) {
mshare.id = id;
mshare.start =
void teacher_stu::eat(account_name student) {
require_auth(student);
mshares mshare_table(_self, _self);
auto it = mshare_table.find( id );
if (it-&start == 1) {
print("student:Class over, go to eat!");
mshare_table.erase( it );
print("teacher:Class time, you can't eat");
仔细观察这段代码就会发现,over和eat动作中都有个”require_auth()”语句。在over动作中,”requir_auth(teacher)”的作用是限制只有”teacher”账户才可以调用over动作。在eat动作中则是限制只有”student”账户才可调用eat动作。
合约数据存储
此合约设计为下课后才可以吃饭,所以当教师账户调用合约的over动作后,需要存储一个合约调用状态值。EOS合约的数据存储需要用数据库,把数据存到一张表中,这是令人很难受的。
teacher.hpp
在teacher.hpp中创建一个结构体。下段代码中的”//@abi table”注释非常重要,必须要写的,如果不写数据将无法存储。
static uint64_t id;
struct mshare {
uint64_t id;
uint64_t start = 0;
uint64_t primary_key() const { return id; }
typedef multi_index&N(mshare), mshare&
DAWN 3.0 使用eosio::multi_index作为容器,我们可以使用emplace来插入数据,使用modify来修改数据,使用erase删除数据。
teacher.cpp
mshares mshare_table(_self, _self);
start = 1;
mshare_table.emplace( teacher, [&]( auto& mshare ) {
mshare.id =
mshare.start =
在over动作中创建数据,学生调用eat动作后再修改或删除数据即可
mshares mshare_table(_self, _self);
auto it = mshare_table.find( id );
if (it-&start == 1) {
print("student:Class over, go to eat!");
mshare_table.erase( it );
合约调用效果展示
$ cleos push action class over '{"teacher":"teacher","student":"student"}' -p student
Error 3030001: missing required authority
Ensure that you have the related authority inside your transaction!;
If you are currently using 'cleos push action' command, try to add the relevant authority using -p option.
Error Details:
missing authority of teacher
学生没下课就吃饭
$ cleos push action class eat '{"teacher":"teacher","student":"student"}' -p student
executed transaction: 02918bea1fd383eced8fbdfd51c06f3b37
102400 cycles
class &= class::eat
{"student":"student"}
&& teacher:Class time, you can't eat
正常下课吃饭
$ cleos push action class over '{"teacher":"teacher","student":"student"}' -p teacher
executed transaction: a92e8ecf6b939e2e35
103424 cycles
class &= class::over
{"teacher":"teacher"}
&& teache:Class over!
$ cleos push action class eat '{"teacher":"teacher","student":"student"}' -p student
executed transaction: 2955a693b626c539d20da9d4f5d41a6b53bb8ca2ba6e
103424 cycles
class &= class::eat
{"student":"student"}
&& student:Class over, go to eat!
查看表中数据
$ cleos get table class class mshare
"rows": [{
"start": 1
"more": false
整个合约写下来调通也是费了我很多脑细胞,数据存储也比较坑爹啊。现在把我的一点经验分享出来,希望大家在学习EOS的路上少踩一些坑。
欢迎添加微信(id:pdj107)
作者:qq_ 发表于
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
是以太坊官方的Javascript API,可以帮助智能合约开发者使用HTTP或者IPC与本地的或者远程的以太坊节点交互。实际上就是一个库的集合,主要包括下面几个库:
web3-eth用来与以太坊区块链和智能合约交互
web3-shh用来控制whisper协议与p2p通信以及广播
web3-bzz用来与swarm协议交互
web3-utils包含了一些Dapp开发有用的功能
搭建测试链
在开发初期,我们并没有必要使用真实的公链,为了开发效率,一般选择在本地搭建测试链。在本文我们选择的(在此之前使用的是testrpc,Ganache属于它的升级版),一个图形化测试软件(也有命令行版本),可以一键在本地搭建以太坊区块链测试环境,并且将区块链的状态通过图形界面显示出来,Ganache的运行界面如下图所示。
从图中可以看到Ganache会默认创建10个账户,监听地址是http://127.0.0.1:7545,可以实时看到Current Block、Gas Price、Gas Limit等信息。
创建智能合约
目前以太坊官方全力支持的智能合约开发环境是,我们在合约编辑页面编写如下代码:
pragma solidity ^0.4.21;
contract InfoContract {
function setInfo(string _fName, uint _age) public {
fName = _fN
function getInfo() public constant returns (string, uint) {
return (fName, age);
接下来切换到 run 的 tab 下,将Environment切换成Web3 Provider,并输入我们的测试链的地址http://127.0.0.1:7545。
在这之前,先在终端创建我们的项目:
& mkdir info
接下来使用 node.js 的包管理工具 npm 初始化项目,创建package.json 文件,其中保存了项目需要的相关依赖环境。
& npm init
一路按回车直到项目创建完成。最后,运行下面命令安装web.js:
& npm install web3
在项目目录下创建index.html,在这里我们将创建基础的 UI,功能包括name和age的输入框,以及一个按钮,这些将通过 jQuery 实现:
&!DOCTYPE html&
lang="en"&
charset="UTF-8"&
name="viewport" content="width=device-width, initial-scale=1.0"&
http-equiv="X-UA-Compatible" content="ie=edge"&
&Document&
rel="stylesheet" type="text/css" href="main.css"&
src="./node_modules/web3/dist/web3.min.js"&&
class="container"&
&Info Contract&
id="info"&&
for="name" class="col-lg-2 control-label"&Name&
id="name" type="text"&
for="name" class="col-lg-2 control-label"&Age&
id="age" type="text"&
id="button"&Update Info&
src="https://code.jquery.com/jquery-3.2.1.slim.min.js"&&
if (typeof web3 !== 'undefined') {
web3 = new Web3(web3.currentProvider);
web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:7545"));
web3.eth.defaultAccount = web3.eth.accounts[0];
var infoContract = web3.eth.contract([{"constant":true,"inputs":[],"name":"getInfo","outputs":[{"name":"","type":"string"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_fName","type":"string"},{"name":"_age","type":"uint256"}],"name":"setInfo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]);
var info = infoContract.at('/*部署合约的地址,自行填写*/');
info.getInfo(function(error, result){
if(!error)
$("#info").html(result[0]+' ('+result[1]+' years old)');
console.log(result);
console.error(error);
$("#button").click(function() {
info.setInfo($("#name").val(), $("#age").val());
以上的代码就简单地实现了对合约中两个函数的调用,分别读取和显示name和age变量。
到此我们就完成了全部的代码,完整代码可以在
中找到。在浏览器中打开index.html测试效果如下图(输入名字和年龄后刷新)。
以上就是如何使用 Web3 在浏览器中与智能合约进行交互的简单示例,目的是理解前端代码是如何与智能合约进行交互的。
作者:qq_ 发表于
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
为什么区块链会与io域名有这么大的联系?
近几年,区块链成为各国央行到国内外各大商业银行、联合国、国际货币基金组织到许多国家政府研究机构讨论的热点,“区块链+”应用创新正在成为引领发展的动力。
能够荣获国内资本投资区块链初创企业的“新宠”基本都是启用.IO域名的企业,其中包括:BlockchainGroup.io、Watty.io 和 DealMatrix.io。
对于全世界而言,.io是最直接、最直观的在互联网上表示信息与知识的符号。不管你是谁,也不管你在什么地方,io都能帮助你迅速找到所需信息。
它不像域名AI,属于安圭拉岛国家,域名服务器就在安圭拉岛中的其中一个小岛上,相反,域名IO没有具体针对英属印度洋领域的某一个国家,更加增加了它的神秘感,从域名开放以来,一直被称为最酷的域名和IT届最神秘的IO。
同时,它还可被理解为[inputoutput]即“输入输出接口”之意。
近年来,随着区块链在世界范围内的快速发展,io域名也被炒得沸沸扬扬,相继有多个io域名在海外节拍,tech.io约12万元交易,db.io(大白)、cloud.io(云)都在海外结拍,价格大约是11万元和27.9万元,analytics.io(分析学)结拍价超6万元。亦有多个区块链相关的企业启用io域名作为企业官网。
因为区块链是去中心化的,理论上区块链可以建立一个不可篡改的、包含所有人的“人才链”。比如:你什么时候参加工作,什么时候离职,老板的评价是怎么样,都可以存在这个链上。又比如房地产的区块链,你的房子是多大,朝向是怎么样的,理论上这些数据都是存在的,只是没有一个统一的地方。
.io是最直接、最直观的在互联网上表示信息与知识的符号。不管你是谁,也不管你在什么地方,io都能帮助你迅速找到所需信息。“区块链+”应用创新正在成为引领发展的动力。能够荣获国内资本投资区块链初创企业的“新宠”基本都是启用.IO域名的企业
每一个新鲜事物的发展都会有一定的发展期,或5年或10年,需要用时间去见证。域名注册现在是百花齐放,.com/.cn等常规后缀主流位置几乎是无可撼动的,特别是在国内尤其明显。而io域名的价值正在与日俱增,成为真正的全球域名新贵,为拥挤不堪的域名世界开创了一片崭新的天地,为用户提供多样的选择、新的契机!
作者:qq_ 发表于
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
EOS 的智能合约基于 WebAssembly(WASM) 技术执行用户生成的应用程序和代码。WASM是一项新兴的网络标准,得到了谷歌,微软,苹果等公司的广泛支持。目前,用于构建编译为WASM的应用程序的最成熟工具链是使用C / C ++编译器的clang / llvm。目前EOS的智能合约仅支持C和C ++编写。我个人认为,EOS的智能合约相较于以太坊的智能合约上手难度要更大一些。通常一个简单的智能合约需要有.cpp、.hpp、.abi这几种文件,其中.hpp文件是包含.cpp文件引用的变量、常量和函数的头文件。.cpp文件是包含合约功能的源文件,用来实现智能合约的功能和动作等。abi文件是应用程序二进制接口文件,是一种基于JSON的描述,通过ABI描述合约,开发人员和用户可通过JSON无缝地与智能合约进行交互。
石墨烯技术:
石墨烯是区块链工具组,由比特股团队cryptonomex开发,采用C++编写,丹尼尔o拉里默(Dan Larimer)是 Cryptonomex 的创始人。并发能力比较强,基于石墨烯底层的BTS和STEEM却可以达到1.5S的平均确认速度和有限条件下实测3300TPS的数据吞吐量,EOS通过并行链的方式,最高可以达到数百万TPS,并且并行本地链甚至可以达到毫秒级的确认速度。
作者:qq_ 发表于
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
以太坊Dapp开发快速入门
以太坊为开源社区,虽然设计东西都很优秀,但是组件十分的杂乱,因此下面首先简单介绍下以太坊的一些常用组件以及各种工具介绍
Geth是由以太坊基金会提供的官方客户端软件,用Go编程语言编写的,也可以理解为以太坊的一个私有节点,在我们开发测试当中起到必不可少的作用,类似于这样的节点还有很多
一个图形化的以太坊私有节点,可以通过该节点看到一些调试的信息,提供了多少个账号,生成的数据块,事物,以及日志log
该软件需要运行在win10 以上版本
Solidity是用于编写在以太坊区块链上运行的智能合约的最流行的编程语言。 它是一种高级语言,当编译转换为 EVM 字节码。 这与 Java 非常相似,其中有诸如 Scala,Groovy,Clojure,JRuby等JVM语言。所有这些编译都生成在JVM(Java虚拟机)中运行的字节码。
Truffle 和 Embark 是用于开发以太坊 DApps的两个最常用的框架。 它们抽象出在区块链上编译和部署合同的许多复杂的东西。
javascript库,可以用来与一个节点进行交互。 由于它是一个 JavaScript 库,您可以使用它来构建基于Web的dapps。 可以直接在node.js 环境上面运行,也可以在浏览器环境上面运行
一个在线版本的solidity 开发工具,可以用来编写合约,发布合约,debug 合约,但是由于是网页版本
首先与bs 架构的原因,功能比较单一,且受限于网络
但是我们也可以在remix 本地化,本地化实际上就是
在本地在启一个服务器,然后在吧remix挂在在服务器上面
[图片上传失败…(image-df575304)]]
作者:qq_ 发表于
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
EOS智能合约开发(一):EOS环境搭建和创建节点
EOS智能合约开发(二):EOS创建和管理钱包
EOS智能合约开发(三):EOS创建和管理账号
部署智能合约的示例代码如下:
$ cleos set contract eosio build/contracts/eosio.bios -p eosio
其中,eosio是要部署的账号,就是你用哪个账号去部署智能合约;
build/contracts/eosio.bios表示的是路径;
eos.bios是生成一个智能合约的目录。
运行Token合约
第一步,Token智能合约部署,代码如下:
cleos set contracteosio.token build/contracts/eosio.token -p eosio.token
第二步,调用create函数,代码如下:
$ cleos push actioneosio.token create ‘[ “eosio”, “.0000 EOS”, 0, 0, 0]’ -p eosio.token
调用create函数,设定到币的最大数目,开始创建我的token。
怎么调用一个action呢?我们都是通过cloes命令行调用action,不过后面跟的参数不一样。push action,这两个都是固定的,后面是合约的名称。
eosio是账号名,后面数字表示设定token总量是10亿,币的名称是EOS币,后面有3个0,代表的是三个参数:can freeze、can recall、can whitelist。这3个参数设置为0,一共传了5个参数,通过这样的方法,去调用整个的合约create的函数。
第三步,转移100个pdj币到user用户,代码如下:
$cleos push actioneosio.token issue '[ "user", "100.0000 EOS","memo" ]' -p eosio
Issue这个操作是用来发币,它后面跟了3个参数:
一个是user,表示这个币发给谁;
数字表示要给这个用户转多少钱,我这里转了100多个user的token;
最后一个参数是是一个备注,相当于转账留言。
第四步、从user用户转移25个PDJ币给tester用户,代码如下:
$cleos push actioneosio.token transfer '[ "user", "tester", "25.0000EOS", "m" ]' -p user
这是一个转账合约的运行过程,先部署合约,然后调用create,可以转账,既可以转到user,也可以从一个user用户转到test用户,整个过程在user wiki文档上也写得比较清楚的。
调试智能合约
现在user官方网站推荐的一个调试方法就是print,把信息打印出来。这个必须要我们搭建本地节点,因为如果没有本地节点,相当于你print打印在别人的节点上,你根本看不到这个打印信息是什么,所以说你必须要搭建一个本地节点。搭建本地节点后,你运行智能合约,就会看到print出来的输出结果。
EOS智能合约的RPC接口
其实智能合约整个只完成了DApp最核心的一部分,就是基本上和资金有关系的一些关键操作,其实大部分的接口、界面,还得我们用JavaScript、HTML去做。
那我们这些DApp其它写界面的操作,怎么去调用智能合约呢?都是通过user智能合约RPC接口调用,智能合约的RPC接口文档链接是:。
RPC的接口我们除了用C++或者用编程的方法去调用一些接口,我们可以用curl这种最简单的方法去调用这个接口。curl它相当于模拟了一个浏览器的操作,我可以向我的运行节点的RPC端口发消息。
这里面我可以给大家展示,我列了3个。
1.get_info:获得节点信息。通过调用这个接口,它会返回我运行节点,比如说server version,就是我运行节点这个节点的版本号;head blocknum,是我当前挖到哪个块了。
用法:curl http://127.0.0.1:8888/v1/chain/get_info
2.get_block:获得一个块的信息。调用该接口,指定块号(blocknum),就可以获得指定块的详细信息。
$ curl http://127.0.0.1:8888/v1/chain/get_block -X POST -d'{"block_num_or_id":5}'
3.get_account:获得某个账号的信息。调用这个接口,可以获得当前我的一个账号信息
$ curlhttp://127.0.0.1:8888/v1/chain/get_account -X POST -d'{"account_name":"inita"}'
EOS智能合约编程示例:HelloPDJ
下面有一个编程示例,给大家展示一下我怎么样写智能合约的。它这个智能合约可以用C语言(一种计算机程序语言)来写,也可以用C++(一种计算机程序语言)来写,这里面我就用C++来写。示例代码如下:
// hello.cpp源代码
#include &eosiolib/print.hpp&
class hello : public eosio::contract {
public: using contract::
@abi action
void hi( account_name user )
{print( “Hello, ”, name{user} ); }
EOSIO_ABI( hello, (hi) )
如果我自己写了一个智能合约,怎么去编译和部署呢?编译的步骤大概是这样的:
第一步,编译hello文件
$ eosiocpp -o hello.wasthello.cpp
$ eosiocpp -g hello.abihello.cpp
第二步,创建账号
$cleos create account eosio hello.codeEOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 ...
第三步,部署合约
cleos set contract hello.code../hello -p hello.code
第四步,调用合约
cleos push action hello.codehi '["user"]' -p user
至此,一个完整的EOS智能合约开发就算完成了
作者:qq_ 发表于
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
https://blog.csdn.net/qq_/article/details/
Go语言具有简单易学、功能强大,可跨平台编译等众多优势,所以这里选择以Go语言切入以太坊。
开始之前需要以下环境:
- Ubuntu(这里以ubuntu16.04为例)
Ubuntu16.04安装Go1.9.2
在与以太坊交互之前,我们需要安装Go语言开发工具,这里选择的版本是Go1.9.2。接下来我们开始安装
在终端输入以下命令
$ curl -O https://storage.googleapis.com/golang/go1.9.linux-amd64.tar.gz
$ tar -C /usr/local -zxvf go1.9.linux-amd64.tar.gz
$ mkdir -p ~/go/src
$ export GOPATH=~/go/src
//go项目要放到~/go/src目录下编译
$ go version
接下来,需要用到ipc方式和rpc方式。go-ethereum中有相关文件和工具,我们把它克隆下来。
克隆go-ethereum到本地
在终端输入
$ cd ~/go/src
$ mkdir -p github.com/ethereum
$ cd github.com/ethereum/
$ git clone https://github.com/ethereum/go-ethereum.git
部署智能合约到geth
接下来的操作需要geth私有节点,下面是启动命令和参数
- 启动geth
-- -- ,,,, -- .
在上编译智能合约
在remix的 run选项中选择”Web3 Provider”,Web3 Provider Endpoint 为””
ipc方式调用智能合约
复制部署智能合约时产生的abi到.abi文件中
通过abigen工具产生.go文件
这里需要编译生成一个abigen工具,用来产生.go文件
编译~/go/src/github.com/ethereum/go-ethereum/cmd/abigen/目录下的main.go
$ cd ~/go/src/github.com/ethereum/go-ethereum/cmd/abigen/
$ go build -i
编译成功之后就会在当前目录下生成abigen
$ abigen --abi xx.abi --pkg pkgname --type apiname --out xx.go
1. abi 文件在 remix 部署时可以得到
2. Pkg 指定的是编译成的 go 文件对应的 package 名称
3. type指定的是go文件的入口函数,可以认为是类名
4. out 指定输出go文件名称
go调用rpc接口
geth启动时加上参数–rpcapi “db,eth,net,web3,personal”
go调用getBalance()实例
package main
"github.com/ethereum/go-ethereum/rpc"
func main() {
client, err := rpc.Dial("http://localhost:8545")
if err != nil {
fmt.Println("rpc.Dial err", err)
var account[]string
err = client.Call(&account, "eth_accounts")
var result string
err = client.Call(&result, "eth_getBalance", account[0], "latest")
if err != nil {
fmt.Println("client.Call err", err)
fmt.Printf("account[0]: %s\nbalance[0]: %s\n", account[0], result)
作者:qq_ 发表于
https://blog.csdn.net/qq_/article/details/

我要回帖

更多关于 合同欠款纠纷代理词 的文章

 

随机推荐