编者按:本文来自橙皮书,作者:orangefans,星球日报经授权发布。
在网上观看一部电影时,我能不能随着播放进度条的进度来付费呢?比如每观看一秒钟就付一点点钱,而不是一次性买断电影单次的观看权?这样我在这部电影上享受了多久的时间,我就需要付出多少钱。这是“可编程货币”的概念。在《你对钱的认知已经严重落伍了》这篇文章里,AndreasM
timeframe
start:流服务开始时的区块高度stop:流服务结束时的区块高度structTimeframe{uint256start;uint256stop;}rate
payment:从付款人到收款人转移了多少资金interval:从付款人到收款人多长时间转移一次资金Methods
getStream返回这个流服务的全部数据,如果id指向的是一个有效的流服务functiongetStream(uint256_streamId)returns(addresssender,addressrecipient,addresstokenAddress,uint256balance,uint256startBlock,uint256stopBlock,uint256payment,uint256interval)balanceOf根据给定的流服务的id和地址,返回合约的可用余额。functionbalanceOf(uint256_streamId,address_addr)create在msg.sender和_recipient之间创建一个新的流服务。MUSTallowsenderstocreatemultiplestreamsinparallel.SHOULDnotacceptEtherandonlyuseERC20-compatibletokens.TriggersEvent:LogCreatefunctioncreate(address_recipient,address_tokenAddress,uint256_startBlock,uint256_stopBlock,uint256_payment,uint256_interval)withdraw从可用余额中提现。只有收款人可以进行这项操作。TriggersEvent:LogWithdrawfunctionwithdraw(uint256_streamId,uint256_funds)stop停止流服务,并且把剩余资金发给付款人和收款人。需要允许收款人和付款人任意一方都可以进行这项操作。TriggersEvent:LogStopfunctionstop(uint256_streamId)update更新流服务的条款。需要允许任何一方都可以提出这项操作的请求,但必须双方全部签名后才能生效。TriggersEvent:LogUpdatefunctionupdate(uint256_streamId,address_tokenAddress,uint256_stopBlock,uint256_payment,uint256_interval)Events
略。参见:https://github.com/ethereum/EIPs/issues/1620我的一些疑问看完这个ERC标准的起草,我仍然有几点疑问:用区块数量来度量时间,这个完全可行吗?有没有潜在的问题?如果在很短的时间间隔里连续支付,比如一秒钟付一次,gas费怎么办,怎么保证交易确实打包成功?假设在这种流服务的智能合约里存了一大笔钱,预计要在十年内慢慢支付出去,那么这一大笔钱在一个合约里会不会不断吸引黑客攻击?像theDAO事件那样。放到智能合约上执行,是不是意味着收款人和付款人的金钱关系完全透明公开、没有隐私了?比如用这种方式发工资,全世界都知道我的薪水多少钱了?现在列举的几个应用场景似乎都不够理想,有没有更合适的新场景?以前不存在的场景?欢迎讨论。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。