庞氏骗局是金融欺诈行为,在高利润的承诺下吸引用户。实际上,用户只能通过加入该计划的新用户的投资来偿还:因此,庞氏骗局在用户停止加入后很快就会崩溃。庞西计划起源于150年前的离线世界,从那时起迁移到数字世界,首先接近网络,最近一直悬于像比特币这样的加密货币。像以太坊这样的智能合约平台为诈骗者提供了一个新的机会,他们现在有可能制造“值得信赖的”欺诈手段,但仍然会让用户赔钱,但至少可以保证“正确”执行。我们对以太坊的庞氏骗局进行全面调查,从各种观点分析他们的行为及其影响。
为了构建庞氏骗局的数据集,我们首先检索在以太坊区块链上发布的合约的Solidity代码。由于区块链只存储EVM字节码,为此我们依赖区块链浏览器Etherscan,它允许开发人员上传合同的Solidity代码,并验证他们的编译是否与区块链上的EVM代码相匹配。
通过手动检查这些合同的Solidity代码,我们检测到138个满足图2中所有要求的合同,因此可以归类为庞氏方案。由于此样本中的所有合同都相对较小(<120LOC,包括评论),手动检查准确到足以检查要求。作为进一步检查,对于所有这些合同,我们研究了他们用来重新分配资金的模式,这是我们在之后分类的基础。为了保持安全(即避免误报),我们没有在这个集合中包含那些过于复杂而无法确定是否满足要求的合同。
表23-1 按投入的以太数量计算的前十名庞氏骗局计划。
我们执行第二个搜索阶段以扩大我们的收藏。更具体地说,我们在以太坊区块链中搜索其字节码类似于我们的初始集合中确定的一些庞氏方案的合同。这是通过以下步骤完成的:
总之,我们最终得到了184个庞氏方案的数据集,我们在goo.gl/CvdxBp上提供了这个数据集(如表1)。我们强调,我们的集合并没有包括已多年来发表了复仇的所有庞氏骗局。例如,合约PonziUnlimited 7公然是一个庞氏骗局,但要检测其逻辑是否满足图2的要求并不是立竿见影的,因此我们不会将其包含在我们的收藏中。
图23-2 将合同分类为庞氏骗局的标准
对于我们数据集中的每个庞氏方案,我们从以太坊区块链收集其所有交易(包括外部和内部)。更具体地说,对于每个交易,我们记录下列数据:(i)封闭块的编号;(ii)在区块链上公布的日期;(iii)寄件人的地址;(iv)接收人的地址;(v)交易转移的以太币数量;(vi)一个布尔值,记录事务执行是否导致错误;(vii)一个布尔值,指示交易是外部交易还是内部交易。我们为此目的开发的脚本利用了Etherscan Ethereum Developer API,可以在github.com/blockchain-unica/ethereum-ponzi上找到它们。
基于执行的合同源代码的分析,我们设计了庞氏骗局的粗略分类法,根据用于重新分配货币的模式对它们进行分类。我们的分类包括四个类别,其原型代表显示在图23-3,图23-4,图23-5,图23-6中。我们在下面讨论我们的分类法的类别。
树形方案使用树数据结构来引起用户之间的排序。每当用户加入该方案时,她必须将另一个用户指定为邀请者,该用户将成为其父节点。如果未指示邀请者,则父节点将是根节点,即方案的所有者。在大多数方案中,用户选择要投入的金额,并且该金额存在下限。新用户的钱在她的祖先之间分配,其逻辑是最近的祖先,她的份额越大。由于节点的子节点数没有限制,节点拥有的子节点(和后代)越多,它将产生的钱越多。
我们在图23-3展示了这种原型方案。要加入该方案,用户必须发送一些钱,并且必须指明将成为其父节点的邀请者。如果数量太低(行15),或者如果用户已经在场(行16),或者如果邀请者不存在(行17),用户被拒绝; 否则她被插入树中(行19)。一旦用户加入,她的投资将在她的祖先之间共享(行25-29),将每个级别的金额减半。
在这个方案中,用户无法预见她将获得多少:这取决于她能够邀请多少用户,以及他们将投入多少。保证获利的唯一一个是所有者,即树的根节点。对于这种方案的例子是Etheramid和DynamicPyramid。
图23-3 一个树形的方案
图23-4 链状方案
链状方案是树形方案的一种特殊情况,其中树的每个节点只有一个子节点(因此,用户之间引起的排序是线性的)。此类别中的方案通常将投资乘以预定义的常数因子,该因子对所有用户都是相等的。该计划开始按照到达顺序一次一个地回馈用户,并且全部:收集所有新投资,直到获得到期金额。在那一刻,合同一次性发回支付,然后转移到链中的下一个用户。投资金额可以是固定的,也可以是免费的,或者具有下限。通常,合同所有者保留每笔投资的费用。
我们在图23-4展示了一个典型的链形方案,它使每个用户的投资增加了一倍。要加入该方案,用户将msg.amount ETH发送到合同,从而触发回退功能(行14)。合同要求最低费用1 ETH:如果msg.amount低于此最小值,则拒绝用户(行15); 否则,她的地址被添加到数组(行17),并且数组长度递增。11 合同所有者保留10%的投资(行22)。剩下的资金,合同试图偿还以前的用户。如果余额足以支付索引支付的用户,则合同向用户支付她的投资乘以2(行25)。之后,合同会尝试向下一个用户付款,依此类推,直到余额足够。
在该方案中,如果方案继续运行,用户可以准确地预测她将获得多少; 金额与她投入的金额成正比。这种例子有Doubler,DianaEthereum和ZeroPonzi。
瀑布方案类似于用户订购的链形方案,但对于货币分配的逻辑却不同。每一笔新投资都投入到投资者链中,以便每个投资者都可以分享。由于逻辑是先到先得的,并且分配始终从链的开头开始,因此链中的用户可能永远不会获得任何金钱。
我们在图23-5展示了这种类型的原型方案,其入口收费为1ETH(行19)10%所有者的费用(行24)和支付6%每个回合的用户投资。支付逻辑从线开始27。如果合同余额足以支付阵列中的第一个用户(位置pos = 0),则合同将发送给该用户6%她的原始投资(行29-30)。之后,合同将尝试支付阵列中的下一个用户,依此类推,直到余额用完为止。在随后的投资中,阵列再次迭代,仍然从第一个用户开始。
为确保所有用户都能收到付款(与要求R3一致),新用户的投资必须与用户数量成比例增长。这种方案的例子是TreasureChest和PiggyBank。
移交计划是链式计划的一个实例,其中入场费由合同确定,并且每当新投资者加入计划时它就会增加。新的投资者的通行费给予全额前一个:因为入口收费越来越多,以前的投资者作出了即时利润。在每个时刻,只有一个投资者正在收钱,一旦她获得报酬,她就会将这一特权交给下一个用户。
图23-5 瀑布计划
图23-6 移交方案
一个典型的例子如图23-6所示。要加入该方案,用户必须至少向合约发送价格 ETH,从而触发线路的后备功能(行11)。合同将该金额转发给前用户,减去合同中保留的费用(行13)。然后,记录新用户的地址(行14),价格加倍(行15)。合同所有者可以通过调用sweepCommission来撤回其份额。
在移交计划中,在投资时,用户确切知道他们将获得多少收益。然而,由于随着计划的进行收费增加,后来的用户更有可能损失他们的钱(与要求R4一致)。移交计划的范例代表是KingOfTheEtherThrone。
本文由南京大学软件学院2016本科生高毓彬翻译转述.
用户3899532 2019-12-12 09:05
curton 2019-12-3 15:49
FPFA兔兔爸 2019-11-28 19:58