50行代码写就以太坊支付

简介:

状态通道(State Channel)是非常流行的扩容方案。比特币线下支付通道有闪电(lightning),以太坊有雷电(Raiden)  本文演示如何立刻用合约写以太坊支付.

源代码在这里

假设在Alice和Bob之间发生的微支付场景: Bob雇佣Alice为他的推特的水军,定期在Bob的推特上发推,回帖。为此BOB答应Alice,每发一个推(tweet),Bob支付0.001个ETH。这种微支付交易通过公链来做的话,20%的Alice的收入都会被以交易费的方式吃掉。

一方面,Alice不想每发100条推特后才信任Bob会付总额0.001ETH*100=0.1ETH。因为BOB有可能赖账。另一方面,Bob不想一次性付Alice发100个推特的钱,因为Alice完全有可能拿了钱,人间蒸发而不干活。

这时候,我们就需要一个支付通道,Bob预先打100*0.001 = 0.1 ETH 到通道的智能合约,按照合约的规则,合约里的钱可能给Alice,也可能退回给BOB. 构造函数如下:

contract Channel {

    address public channelSender;
    address public channelRecipient;
    uint public startDate;
    uint public channelTimeout;
    mapping (bytes32 => address) signatures;

    function Channel(address to, uint timeout) payable {
	    channelRecipient = to;
	    channelSender = msg.sender;
	    startDate = now;
	    channelTimeout = timeout;
    }

假设Bob送了0.1 ETH给这个合约,而且设定Timeout为1天。如果timeout发生,Bob可以撤销这个合约,从而获得被退回的余额.

Alice看到支付通道合约里有钱被锁定了。

Alice就放心的开始工作:发推特。每发一个tweet, Bob就用私钥签名一个(contract_address, value)产生的哈希值,并送给 Alice. 所以,Alice发第一个tweet, Bob 就签(0x123…, 0.001 ETH), 发第二个推特,Bob签(0x123, 0.002 ETH), etc…

每次Alice收到Bob签名的信息,Alice也签名,但是并不送到公链。任何时候Alice决定终止这分工作时,alice需要发一个多人签名(Bob和Alice)的消息给合约。合约就会送给Alice事先约定好的酬劳 (say, 0.05 ETH=发了50个推特*0.001ETH) 并把合约里剩余的资金返回给Bob.

function CloseChannel(bytes32 h, uint8 v, bytes32 r, bytes32 s, uint value){
		address signer;
		bytes32 proof;

		// get signer from signature
		signer = ecrecover(h, v, r, s);

		// signature is invalid, throw
		if (signer != channelSender && signer != channelRecipient) throw;

		proof = sha3(this, value);

		// signature is valid but doesn't match the data provided
		if (proof != h) throw;

		if (signatures[proof] == 0)
			signatures[proof] = signer;
		else if (signatures[proof] != signer){
			// channel completed, both signatures provided
			if (!channelRecipient.send(value)) throw;
			selfdestruct(channelSender);
		}
}

Alice可以调用这个函数中止通道。因为调用此函数需要Bob和Alice的签名,Bob不能单方面的关闭合约(从而不付Alice她应得的报酬)

因为此函数需要Bob和Alice两个人的签名才能执行,Bob和Alice都不能单方面的从合约里提钱。

如果Alice是恶意的,而且希望欺骗Bob:让Bob把钱锁进合约,但是Alice不干任何事,并且伪造一个交易(让合约送给Alice一半的钱)这种情况下,ChannelTimeout函数可以保护Bob:Bob可以等一天,然后调用, 把合约销毁,并把合约里所有的资金返回给Bob.

function ChannelTimeout(){
	if (startDate + channelTimeout > now)
		throw;

	selfdestruct(channelSender);
}

Timeout 函数保证Bob 免受勒索

同时,在Bob和Alice的签名提交到公链之前,Bob没有Alice的签名。Bob不能单方面关闭通道从而免付Alice应得的报酬。如果Alice觉察到Bob没有付钱了,Alice可以关闭通道从而拿到她应得的报酬。唯一的损失是Alice可能损失她发最后一个推特的钱。同时Bob和Alice节省了大量的交易费!

一个支付合约就写完了

 

参照

附:

ecrecover函数是由以太坊提供的一个全局函数,用于签名数据的校验。与上面所陈述的方式略有不同的是,这个函数返回的是签名者的公匙地址。如果返回结果是签名者的公匙地址,那么说明数据是正确的。

ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) returns (address)

ecrecover函数需要四个参数,需要被签名数据的哈希结果值,r,s,v三个值。通过前面的说明,我们知道r,s,v是分别来自签名结果串。

r = signature[0:64]
s = signature[64:128]
v = signature[128:130]

其中v取出来的值或者是00或01。要使用时,我们先要将其转为整型,再加上27,所以我们将得到27或28。在调用函数时v将填入27或28。

如果你使用以太坊的客户端进行签名时,它们会在你要签名的数据前增加前缀\x19Ethereum Signed Message:\n。

eth_sign

The sign method calculates an Ethereum specific signature with: sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message))).

 

相关文章
|
29天前
|
网络协议 Java 测试技术
网站开发性能测试-JMeter 压测 Tomcat 接口的并发吞吐量(QPS)
在企业级网站开发、Java Web 系统上线与后端架构调优实战中,**性能压力测试(Stress / Load Testing)** 是验证系统高可用性、探测吞吐量极限与排除潜在并发死锁、内存泄露(Memory Leak)的必经之路。 对于采用 Apache Tomcat 作为 Servlet 容器的企业级应用(如 Spring Boot 内嵌 Tomcat 或独立 Tomcat 9/10 集群),单台服务器在面对每秒数百乃至数万次的高频请求时,其底层线程池调度、I/O 多路复用模型(NIO/NIO2)、JVM 垃圾回收机制以及操作系统内核 TCP 队列均会承受极限考验。
|
Oracle 关系型数据库 数据库
|
29天前
|
存储 人工智能 弹性计算
新版阿里云服务器租赁费用解析:收费标准、计费模式与新老用户活动报价完整参考
在云技术普及的当下,云服务器已经成为个人开发者、中小企业搭建网站、部署AI服务、运行业务系统的基础算力载体。很多用户初次接触云服务器租赁的时候,很容易被复杂的计费项、多种付费模式、新老用户差异化活动报价混淆,只关注实例本身价格,忽略磁盘、带宽、快照等附加资源开销,最终实际账单远高于前期预估。阿里云服务器整体费用并不是单一固定数值,总租赁成本由计算实例、存储磁盘、公网网络、附加增值服务多个模块共同组成,不同计费模式、实例规格、地域、用户身份都会直接影响最终支出。本文完整拆解整套收费体系,讲解各类计费模式的底层规则,梳理不同类型实例的报价参考,同时讲解成本排查、费用优化的实操手段,附带可直接执行的
214 0
|
3月前
|
人工智能 运维 安全
2026最新Qoder CN服务平台功能全面详解
在软件开发行业高速迭代、项目需求愈发复杂、研发节奏持续提速的当下,传统人工编码模式存在效率低、BUG率高、规范不统一、复杂任务落地难等诸多痛点,AI智能编码工具已然成为研发团队降本增效、标准化开发的核心刚需。Qoder CN作为全新迭代升级的AI智能研发服务平台,整合智能编码、任务自主规划、多智能体协作、桌面AI助理、云端数字员工、设计转代码、自动化复盘进化等全维度能力,重构软件开发、办公协作、工程落地的全流程体系。2026年最新版本完成全方位功能升级,上线Quest2.0智能任务模式、Subagent子智能体协同、企业级技能编排、自主进化学习等核心能力,同时优化CLI命令工具、IDE插件适配
726 0
|
4月前
|
缓存 网络协议 网络安全
Notion 图片无法查看?一分钟修复的完整实录
本文提供Notion国内访问卡顿、图片转圈/裂图/空白的合法本地解决方案。聚焦DNS解析慢、国际出口拥塞等根因,详解通过修改Hosts文件指定最优IP(如119.28.13.121)加速www.notion.so等关键域名,并附Windows操作避坑指南、一键脚本及排错清单。
876 0
|
5月前
|
人工智能 数据挖掘 测试技术
云端MoE vs 本地Dense:DeepSeek与Gemma4 26B的选题策划能力量化对比评测
本文开展真实A/B测试,对比云端DeepSeek与本地Gemma4 26B在“智能生活办公”热点选题策划中的表现。前者胜在数据精准、转化直接;后者强于概念升华与立意深度。Hermes Agent实现统一调度与全链路自动化。
452 0
|
7月前
|
人工智能 编解码 自动驾驶
GPU服务高性能:解锁高效计算新可能,适配多场景算力需求
在数字经济快速迭代的今天,AI大模型训推、影视渲染、科学计算等领域对算力的需求呈指数级增长,GPU服务高性能已成为突破计算瓶颈、提升作业效率的核心支撑。不同于传统CPU的串行计算模式,高性能GPU服务凭借强大的并行处理能力,将海量复杂计算任务拆解并行执行,大幅缩短任务周期,降低计算成本,成为各行业数字化转型的关键基础设施。
|
7月前
|
人工智能 弹性计算 自然语言处理
阿里云2026年AI焕新季,马上用千问活动:先用后返至高500元、万亿Tokens扶持、AI焕新礼包规则介绍
阿里云2026年AI焕新季推出千问焕新计划,提供至高500元先用后返优惠,企业新客可享万亿Tokens扶持并申领至高2000元优惠券。领券下单再减1728元,覆盖文本、语音、视觉等全模型。活动包括低至9.9元快速部署OpenClaw,大模型服务节省计划低至4.5折。
2204 2
|
JavaScript 前端开发 开发者
Vue 自定义进度条组件封装及使用方法详解
这是一篇关于自定义进度条组件的使用指南和开发文档。文章详细介绍了如何在Vue项目中引入、注册并使用该组件,包括基础与高级示例。组件支持分段配置(如颜色、文本)、动画效果及超出进度提示等功能。同时提供了完整的代码实现,支持全局注册,并提出了优化建议,如主题支持、响应式设计等,帮助开发者更灵活地集成和定制进度条组件。资源链接已提供,适合前端开发者参考学习。
887 17

热门文章

最新文章