模型
系统
有向图D
交换协议
某协议执行后的结果(对于某一方用户)
- FreeRide:获得资产而不付钱,执行的边中至少有一条边终点是该点,但是没有以该点作为起点的边
- Discount:获得所有资产而付更少的钱,所有终点为该点的边都执行了,但是至少有一条起点为该点的边没有被执行
- Deal:正常交易,所有相连边都被执行
- NoDeal:不进行交易,所有边都不执行
- UnderWater:只付钱,不要求获得相应数量的资产,至少有一条以该点为终点的边未执行,至少有一条以该点为起点的边执行了
交换协议的目标:让所有节点都达到Deal结果,如果出现错误或干扰,达到NoDeal结果
如图所示:
- NoDeal$\rightarrow$Deal:比起NoDeal结果,每个节点都更加希望达到Deal结果(因为每个节点都是同意产生swap的)
- NoDeal$\rightarrow$FreeRide:能够获得免费的资产
- Deal$\rightarrow$Discount:节点都希望能获得所有资产,但是更希望付更少的钱
- UnderWater是节点不能接受的状态,其余都是能接受的
定义
交换协议的一致性定义
交换协议的原子性定义:既具有一致性,又是一个强纳什均衡策略
定理:针对D的一致性的交换协议是原子性的,当且仅当D是强连通的;如果D不是强连通的,那么没有任何的交换协议可以达到原子性
原子交换协议
哈希锁和哈希密钥
主要实现是基于哈希锁的(以及时间锁)
两方交易
见哈希时间锁合约博客
多方交易
每条边都有一个哈希锁和时间锁,进入节点follower v的边的超时时间最少比离开该节点的边的超时时间晚一个$\Delta$(合约发布以及确认需要的时间)。这样做是为了确保离开节点v的边执行后,v有足够的时间去执行进入v的边。
单leader情况
多leader情况
针对图D给出反馈顶点集$L=\{v_0,…,v_l\}$,L中的节点是leader,每个leader $v_i$持有一个密码$s_i$和密码对应的哈希锁$h_i=H(s_i)$,形成一组哈希锁$(h_0,…,h_l)$,用来分配给每条边
边$(u,v)$的哈希锁h的钥匙是一个三元组hashkey $(s,p,\sigma)$
- s:密码s
- p:路径 $(v,…,u_k)$ $u_k$是管理该哈希锁的leader节点
- $\sigma$:$\sigma=sig(…sig(s,u_k),…,v)$ 路径中的每个节点都对s签名
hashkey超时时间长度为$(diam(D)+|p|)\cdot \Delta$,从协议开始时算起(?)
边被触发:所有哈希锁都被打开
哈希锁超时:所有该锁对应的key都超时
Pebble Game
Lazy Game
在从leader出发的边上放石子;如果进入节点v的每条边上都放了石子,那么在从v出发的边上也放上石子
Eager Game
???????
协议内容
leader的第一阶段协议:
- 在以leader为起点的边上发布合约
- 等待,直到所有以leader为终点的边上都有了合约
follower的协议:
- 等待,直到所有进入该节点的边上都有合约
- 在以其为起点的边上发布合约