Interactive coin offerings 交互式代币发行

in #ico7 years ago

Interactive coin offerings
交互式代币发行

Jason Teutsch Vitalik Buterin

翻译:周朝晖、李戈
摘要
以太坊已经成为一个区块链代币兑换的动态平台。虽然代币众筹不能同时保证投资者的估值的确定性和参与的确定性,但是如果每个代币投资者在每次评估的时候,可以指定其投资额能购买的数量,则每个人都可以成功参与。我们的实施方案引入了补充外部参与者的智能合同技术,以避免计算复杂性的障碍。
1 众筹的困境
今年,大家见证了代币众筹亦即“ICO”(Initial Coin Offerings,以下一律带引号以区别本论文讨论的新型ICO)的激增。代币激励通过采用代币奖励的新型组合、软件使用权、协议治理以及传统权益,形成了新的社区结构。不包括比特币的代币市场的总市值在2017年6月份持续飙升,超过了600亿美元。大多数代币发源于以太坊网络,以太坊一直在艰难地跟上投资的需求。有些时候,仅仅一个众筹就可以在接下来的连续几个小时消耗掉以太坊网络全部的带宽。
代币分发可以有多种形式。 例如,比特币依旧通过称为挖矿的竞争性计算过程来分发代币。在本论文里,我们应该更多的关注我们自己在一个典型场景里的情况,即一个匿名投资者希望在以太坊(Ethereum)网络上以太坊自己的代币(即ETH)购买尚未生成的ERC20代币。与股权分配事件不同,潜在投资者可以根据现有和潜在的未来营收来源来估计股票价值,代币销售可能根本不会产生任何收入。由于传统分析无法估计新代币的初始市场估值,投资者必须依靠新的信号和方法来确定市场价格。另一方面,代币发行人面临着前所未有的挑战,她完全不了解她的投资者。 特别是,她不知道两个不同的购买代币的钱包地址是否属于同一个人。
Ethereum社区已经尝试了ERC20代币的各种销售配置。例如,在限售销售中,发行ERC20代币的项目,公告每个新代币的固定价格,以及要出售的代币的最大(和最小)数量。限额销售可以达到数千万美元,并在几分钟内卖完,留下一些失望且沮丧的无法参与的投资者。没有最大限量的销售,则对于最终投资者购买到的代币在总代币里的占比,只给投资者提供很少一些线索。其它的分发尝试,包括隐藏最大限额和反向荷兰式拍卖,都出现了类似的问题[1]。实际增长的购买力和限购可能导致投资者参与反向荷兰拍卖时过早出手。
最近,Buterin[1]提出了众筹的两个理想的,且相互排斥的属性。
论点:没有一个代币众筹可以满足两者

  1. 以一笔固定数量的ETH(或BTC)最低可以购买到占总代币某个固定比例的代币,且
  2. 每个人都可以参与
    证明:如果一个货币单元至少以比例p购买了代币,那么总销售的收入不能超过1/p个该货币单元——以ETH作为投资币种为例,则总销售收入不能超过(1/p)个ETH。
    显然,任何固定估值方案都不能保证投资者普遍参与,但是,我们将构建一个众筹协议,来保障如果每个参与者都可以在每一次估值时指定一个想要的购买数量,则最终的代币成本的百分数能满足所有投资者(兼顾估值和成功参与)。
    2 搭桥术
    我们的交互建设旨在建立一个均衡的购买量,其总量令所有具有一致估值的投资者都感到满意。
    鉴于在众筹前不存在新代币的流动性市场,我们将使用众筹过程本身达到代币当前估值的共识。我们的协议在这个意义上是公平的,大资本投资机构或者以太坊挖矿算力都无法获得投资优势或者降低新代币的投资成本。此外,激励措施将抵消投资者不愿意参与初步流动性不足的市场的意愿。最后,我们要指出的是,在保证公众可以访问所有的销售数据的情况下,众筹将变为一个完美的信息游戏。
    我们的方法与以前的众筹分配机制的区别:
  3. 投资者可以在转账之后撤回投资(有一定的限制条件),并且
  4. 该协议利用了智能合约的复杂记账功能。
    本论文讨论的众筹应该是交互的,潜在的投资者可以根据其他投资者的行为进入和退出众筹,且在这样做的时候,估值将趋向市场平衡。该协议还留下了足够的时间让投资者进行非正式的社交互动。
    代币发行者在以太坊区块链上部署了一个智能合约之后,这种交互式众筹即告启动。为便于讨论,我们将智能合约定义为通过接收以太坊的代币即ETH,并支付投资者一种新生代币的一个普遍受信任的机器。由潜在投资者持有的匿名ETH地址关联的ETH和信息组成的一个组合,通过算法管理这些支付和部署。因此,智能合约能够有效地收集和保持众筹代币的平衡。通过他们各自的地址,投资者使用ETH购买,并最终收到众筹项目新生的代币。
    从ETH地址到智能合约的新消息通过区块,以一个有规律的时间间隔(大约15-20秒)进行广播。或者说以太坊每增加一个新区块,就会有一批信息得以广播。这样,区块数就可以作为以太坊网络上的时间度量。众筹的智能合约可以把当前区块的高度作为起点,以区块高度作为计时工具改变智能合约的行为。
    我们现在描述一个简单的交互式的代币发行机制。
    我们将在第4节中提供更详细的规范。
    基础步骤:在有效区块高度范围之内,投资者既可以购买代币,也可以从众筹中自行撤回资金。任何投资者在参与众筹时,可以自定义他愿意参与的最大项目估值(如2000ETH),如果众筹总额达到他设定的这个估值,投资者的投标(投资)将被自动取消,他的投资资金也就自动被退回到他的钱包。 在第7节中,我们增加了由投资能获得的最低代币数触发的投标激活机制。
    投资锁定:经过一定数量的区块后,将不再允许投资者自己撤回投资款。 例如,在一个总时长30天(译者注:实际时间由区块高度决定,为便于理解,假设设定的区块高度需要30天才能到达)的众筹中,智能合约规定在前20天内允许自行撤回投资,但在最后10天,只允许自动退款。
    通胀坡度:早期购买代币的投资者获得折扣价。最大奖励可能是20%(目前众筹的典型数额)。奖金在开启投资锁定时平稳降至10%,然后在众筹结束时消失。
    每个投资者都可以在众筹中提交多个出价,即基于各种不同估值的多个投标金额。特别是,他们可以自定超过项目方预设的流通货币总量的限额,以保证中标。本ICO模式在投资锁定之前,给投资者提供了一个可以调整投资的机会,同时在进入投资锁定期之后,又给投资者提供了让项目在各方的议价下达到一个平衡点的机会。通胀坡度降低了代币发行阶段的惰性,激励了流动性市场的快速形成。
    3 特征表
    我们将在众销售参与者中假定某些一致的特征,这将使我们能够在第5节中推出得出众筹的不变量。
    3.1 投资者
    投资者通过提交一系列投标来设定个人参与目标,每个投标都构成一个“步骤”。
    定义:一个投资者的估值表(valuation table)是一个从众筹的总销售额到投资者的投资金额的分段步骤函数。
    投资者可能希望以许多不同的理由购买代币,在这方面我们没有做出具体的假设。对于我们的模型,所有的购买者都满足以下特性。
  5. 需求与供应相反
    总销售金额会影响个人的投资额度,在一个流动性市场中,投资者至少会以较低的估值购买和高估值时同数量的代币。在第7节中,我们将放宽这一假设的后半部分,并相应地修改第4节的核心协议。我们显然不假定,在认同一个流动性市场的交易数量或者估值限额时,投资者的投资额度会降低。
    我们将在5.1节中说明:在我们假设“投资者的需求在更高的估值下下降”的情况下,每个投资者的累计投资额最终并有效地聚焦到一个单调递减的估值表。如果投资者不符合这个标准,我们的协议和分析就会变得复杂。首先,对协议中较低的准入限制进行调节和监控,这将给众筹智能合同增加额外的计算压力。在第7节中,我们将讨论一个有效的解决方法。其次,在销售总额达到目标阈值后,投资者可以通过手工购买额外的代币来达到类似于不降低估值的效果。然而,如果有足够多的投资者采用这种奇怪的策略,网络可能会因为一个正向回馈循环而变得拥塞,并令这些策略无法正常执行。
  6. 流通市场偏好
    投资者对于进入一个新的众筹有固有的内在惰性。由少数所有者持有的代币可能难以交换,因此具有不确定的价值。鉴于先买风险,如果没有其它激励措施,大多数投资者更愿意等待别人购买后再购买。等待的时间长短可能因投资者而异。 我们在第7节讨论其它可能的惰性来源及其规避措施。
  7. 对社会影响力的依赖
    投资者依靠社会影响力来做出购买决定。由于新代币的初始价值在很大程度上取决于他人的信念,投资者必须与其他投资者直接或间接地进行互动。在众筹的开始阶段,投资者缺乏可靠的信息来评估新代币。社交八卦的步伐比纯粹的算法交易要慢得多,因此决定了众筹的速度。最后,我们假设社交互动将最终引导每一个投资者,但在众筹结束之前,最终会聚焦到一个终极估值表中。
  8. 倾向于简单
    购买代币的复杂程序减少了参与。 可以忍受的限度因人而异,特定的规则或步骤可能会鼓励或阻止某些类型的投资者。
  9. 匿名
    投资者需要不隐匿他们的身份来参与众筹。事实上,我们期待每个投资者都可以用多个匿名地址的出价来组合她的估值表。
    3.2 竞争对手
    我们将对手定义为通过执行网络操作(包括购买和退款),以降低其购买的代币的成本的任何实体。我们认为对手拥有巨大的财务和挖矿资源,但还不足以形成一种长时间的,阻止其他投标进入众筹的拒绝服务攻击。尤其是,我们假设在众筹阶段,对手能够导致严重的拥堵或者延长网络审查的时间是可以忽略不计的。我们还假设对手的行为受到以太坊(Ethereum)网络的限制。例如,他无法阻止其他想要参与众筹的投资者。最后,我们假设众筹智能合约总是正确地处理投标。
    4 ICO协议
    现在我们来描述众筹智能合约的运作情况。为了本演示文稿的目的,众筹的估值是指以ETH为基准的新代币的总价值,而不是生成的代币的总数值。我们假定与众筹事件有关的任何已创建但尚未售出的代币,占到将要产生的代币总数的某个固定分数。
    随着新投标进入众筹(下面的步骤1),该协议将以最小的个人上限撤销有效的出价(步骤3)。 步骤3.3讨论通过部分退款以执行单调估值恒定(见第5.2节)的问题。因此,如果几个投标栓定了最低限度的个人限额,协议将以同等百分数退还每个投标的资金。为避免这样的关联造成完全出局,投资者可能会错开他们的出价,然而,即使没有这样的操作,单调估值恒定也是存在的。
    初始化
    所有地址都具有“非活动”状态。 固定时间阈值0≤t<u,其中t对应于第2节的“投资锁定”时间阈值,并设置s = 0。令p(s)表示阶段s的平台代币的购买力的正值递减函数。最后,现在定义众筹当前的瞬间估值如下。

V=0 如果没有地址是激活的;
V=ΣA active v(A)否则
这里A是一个地址,v(A)是将地址映射到以下指定的代币数量的函数。
主循环
当s≤u,在每个区块中重复以下四个步骤,其中u界定众筹的结束时间。
步骤1:接收竞价
1.任何“不活跃”的地址A可以发币到众筹智能合约
• 一个为正数的平台代币(如ETH)数量v(A)以及
• 一个正数值的个人上限c(A) > V。
2.然后,智能合约
• 设置地址余额b(A) = v(A) · p(s),有效地实施通胀坡度(第2节),以及
• 将A的状态设置为“活跃(有效)”。
步骤2:自愿退款(如果s≥t则忽略此步骤)。
以下仅适用于在时间t的投资锁定 阶段之前。任何“活跃”地址A都可能希望从先前任意一个阶段取消其出价。根据这样的信号,众筹智能合约执行以下操作:

  1. 将v(A)个平台代币(指ETH)退回到A,和
    2.将A的状态设置为“已使用”(used)。
    步骤3:自动退款。
    当存在一个个人上限已经被现在的众筹总值超过的活跃的地址B,即V > c(B),重复以下三个步骤。我们仅在while循环的每次迭代后更新值V,而不管(4.1)是否成立。

  2. 设B1,...,Bk是当前时刻具有最小个人上限的(不同)活跃地址,即

  3. 如果删除B1,...,Bk中的出价,也不足以满足来自活跃地址的所有个人上限,即
    V − S ≥ c(B1), (4.1)
    那么众筹的智能合约将踢出这些全部的出价。具体而言,智能合约将:
    • 对于所有i≤k,将投资额v(Bi)退还给Bi
    • 将B1,...,Bk的状态设置为“已使用”。

  4. 否则,(4.1)的反向不等式成立,并且每个v(B1),...,v(Bk)中的的一部分从众筹中退出。
    令0 <q <1是这些数量的最小(正)分数,为了满足所有剩余的个人限额,必须将其去除,即:
    .
    对于所有 i≤k,众筹智能合约:
    • 退款q · v(Bi)到Bi,
    • 将v(Bi)的新值设置为(1 − q) · v(Bi),并且
    • 将b(Bi)的新值设置为(1 − q) · b(Bi)。
    Bi仍然是“活跃的”,而且总众筹估值现在正好是c(B1),因为上面的过程从众筹的智能合约彻底删除了qS个平台代币(即ETH)。
    步骤4:增量
    最后阶段: 每个“活跃”地址A在众筹结束时接收到b(A)个代币。
    注意,步骤3中的循环最终终止,这是因为V随着每次迭代而减小,而min{c(B) : B是活跃地址}增加。
    5 分析
    在第4节,我们通过详细介绍一些交互式代币发行协议的特点进行总结。我们的分析依赖于两个关键的定量,即估值随着时间的推移单调增加,而且所有个人上限都高于每个区块高度的当前估值。
    5.1 个人上限恒定
    我们认为最终的众筹估价和购买量符合每个投资者的估值表(见第3.1节)。 为了解析这个观点,我们需要解释两件事情:

  5. 从各种地址累积的投资者的投资,如何恰好与一个估值表相符合,并且

  6. 对于众筹来说,“符合”估值表意味着什么。假设V是众筹的最终估值。
    关于项目1,请注意,地址A的每个出价的净购买效果是单步估值表(单点取模):

这里V0是地址出价时候的众筹估值。我们不能为A[c(V )]指定确定的数值,因为此估值的购买金额还取决于其它地址的出价。A可以在第4节的第3步中获得部分退款,或者根本没有。投资者的累计购买金额由他竞价的总额决定。 换句话说,投资者(逐步回归的)估值表等于他的地址的单步估值表的总和:这回答了项目1。如3.1节所述,由于单步竞价函数可能会在那个点之后结束而不是开始,所以限制投资者最后一次出价权的估值表图形是一个单调递减函数。
我们现在把注意力转向项目2。我们说,如果以下条件成立,估值V和购买金额a满足投资者的估值表T:

  1. a = T(V ) ,如果V是某个估值表步骤的内点( Interior Point ); 否则
  2. 当x接近V时,a等于T(x)的左右极限之间的一些值。
    有两种情况需要考虑。如果众筹的最终估值V不等于任何投资者的活跃地址A 的c(A), 那么V不是投资者地址的任何单步估值表的极限点,而T(V )只是在V评估时的单步估值表的总和。在这种情况下,T(V )完全匹配购买金额,满足上述1)。否则,V匹配某个地址的个人上限。那么V是投资者估值表上的某个步骤的极限点,实际购买金额是活跃地址A的总和v(A),其个人上限不等于V加上地址A的v(A)的一部分,地址A的个人上限匹配V,根据预期产生(b)。
    总而言之,众筹满足投资者的估值表,与其投标金额非常相近。
    5.2 单调估值恒定
    我们将证明,无论招标投资者提交什么出价给众筹智能合约,估值在不同时间阈值t之后单调增加。在时间t之后,自愿退款不会发生,所以我们只需要考虑其它协议的步骤。通过步骤3中的循环条件,我们可以假设步骤1开始时的估值大于或等于每个活跃地址的个人上限。步骤3中循环的每次迭代中的活跃地址是在步骤1结束时活跃的那些地址的子集,此外,步骤3结束时的估值不低于每个活跃地址的个人上限,无论循环是否在步骤3.2或步骤3.3之后终止。为了重设上限,步骤1开始时的估值小于或等于当时所有活动地址的最小值,小于或等于步骤3结束时的估值,证明完成。
    上面的不变属性允许交互式代币发行(ICO)抵制以下形式的来自富有的投资者或鲸鱼的“排挤攻击”。 假设有两个现有的投标,每个采购30个代币,每个出价的个人上限为79个代币。现在,假设一头鲸鱼投标购买50个代币,其个人上限为200个代币。所有投标的总额现在是110个代币(30+30+50),超过前两位投标的个人上限。如果这两个投标出局,那么鲸鱼的投标估价为50,低于原来估价的60个代币。上述不变量证明了这不可能发生。

5.3 Fairness 公平
协议对大量购买和小额购买保持公平。具有低个人上限的鲸鱼与购买一小部分代币的投资者一样被挤出众筹。此外,任何投资者都可以指定他们满意的任何特殊的个人上限,且提交交易到众筹智能合约的费用是基于以太坊GAS价格的费用(见第6节)。最后,智能合约公开处理所有购买行为,这意味着所有潜在投资者都拥有所有其他投标的完整信息。
5.4 审查
在过去,在有上限的众筹过程中,鲸鱼受益于网络堵塞。例如,一个BAT(Basic Attension Token) 众筹投资者支付了6660美元的单笔交易费用,以确保他的交易记录到当前区块,有效地阻止其他投资者参与[1]。在理论上,矿工可能会通过在众筹中审查交易,潜在地模拟或放大这种偏差。虽然这些类型的拒绝服务攻击可能会在时间短暂的众筹中成功,它们在时间足够长的众筹(例如本文讨论的众筹)中则是要付出不合算的代价的。
5.5 最后一分钟退款
一个巨鲸竞价了一大笔代币,然后在最后一个区块众筹中撤回投资,这样就可以既阻止其他投资者参与,又造成人为的低价。因此,我们的ICO协议禁止在众筹的后期自愿退款。通过禁止最后一分钟的退款,我们的ICO协议在众筹结束之前增加了聚焦到稳定的出价的机会。
5.6 Overcoming inertia 战胜惯性
本ICO协议的设计鼓励了早期参与者,维持了参与众筹的一个低门槛。通膨坡度(第2节)激励投资者早日参与众筹,并形成流动性市场。此外,众筹的初期提供低风险的试用期,投资者可以用以太坊gas费用这点可以忽略的成本撤销他们的投资。最后,该众筹有一个相对简单的用户界面。任何誓要购买到代币的人,不再有自动退款的风险,他可以向众筹的智能合约提交一笔交易,让其个人限额超过发行的本地代币总数(基于以太坊的可预测的价值)。
6 Lightweight implementation 轻量级实施
在3.2节中,我们做出了简单的假设:“众筹智能合约总能正确处理投标”。 我们现在改进了这个简单的观点。定量的资源是与以太坊的每个区块的燃料(gas)限制相绑定的,最小复杂度的计算任务就是只要有足够的gas,或区块创建者的付款,以及初始化任务的交易,即可正确执行。智能合约本身可以调用任务,只要:

  1. 任务本身在每个区块gas限制(和可用的网络带宽)内运行,
  2. 智能合约有足够的以太或原生币来支付执行任务,且
  3. 智能合约在用户及其进行交互的区块之间保持休眠状态。
    本ICO协议的主循环(第4节)要求维护具有各种个人上限的地址列表,一种寻找最小个人上限的地址集的方式,以及从列表中删除该集合的机制。传统堆积数据(heap data)结构需要O(logn)时间,在大小为n的列表上执行这些操作中的一个或多个操作。因此,如果地址列表增长到足够大,那么智能合约在不违反上述项目1的基础上,将无法维护内存堆。而且,对于每一个项目2,谁支付每一次的这些操作,什么时候支付?自主的众筹智能合约可能会随着时间的推移变得越来越昂贵。从检查中可以清楚,下面的构造是否满足项目3。
    鉴于在众筹智能合约中维护堆积数据结构的不可行性,人们可能会想,智能合约是否可以通过激励来招募外界组织,来执行必要的堆积维护。然而,外界组织可能会提供不正确的数据。智能合约如何知道提供的地址实际上是否具有最小的个人上限?智能合约无法验证和删除实际的个人上限意味着存在潜在的攻击向量。假设有一个个人上限为60的50的投标,一个个人上限为80的35的投标,目前的估值为115。如果攻击者公布80是其最低的有效个人上限,则(35,80)的投标将完全出局,而(50,60)投标的部分仍然保持有效。然而,根据本协议规范,(50,60)应该完全出局,而(35,80)的出价仍然是完全有效的。
    我们通过在排序的链接列表(一种其中列表中的每个元素包含指向其后继者的指针的数据结构)中维持主动出价来减轻上述攻击。最低个人上限的投标位于列表的前端,因此智能合约可以快速找到和(或)删除它们。虽然排序链表中的插入操作需要O(n)时间,但智能合约可以轻松检查其正确性。新元素必须简单地具有大于或等于其传入邻居的个人上限并且小于或等于其输出邻居的个人上限。因此,我们满足项目1。
    收到新的出价后,智能合约可以为任何正确指出将其插入链接列表(linked list)位置的人员提供公开的奖励。投资者提交此出价时,需包含一个小额付款用来激励此插入。为了确定激励因素,我们假设本地的链下O(n)操作需要可忽略的计算时间,并且ETH的价格足够稳定,使得不变的激励金额保持足够。最后,智能合约按照第4节第3步所述执行自动退款。新增的投标也包含了这一规则的gas费用。为确保对gas成本的限制,智能合约有一个根据每个区块删除或减少的投标,而设置的固定的最大投标数上限。这一限制确保了对出价固定成本的限制,并保证删除步骤适用于以太坊的gas限制,从而满足项目2。
    7 Personal minimums 个人最小限额
    融资本身使得项目更有价值。项目基础成本有所不同,但可能包括人员,法律费用,营销,办公空间,许可证,旅行,设备或管理。对于资金不足的项目相关的代币,投资者可能会感觉到更高的风险。此外,对于获得风险投资所需的固定成本,他们可能不会一致同意。一个众筹,如果允许每个投资者设置其投资能获得的个人最低代币数量,从而可以降低入场的风险,人们就希望参与其中。下面我们来描述实现个人最低限额的实际机制。
    假设一个众筹智能合约收到3个投标,每个投标的投资为10,个人最低限额为30。虽然众筹估值可能永远不会达到这三个投标的激活阈值,每个投标都希望其它两个投标首先被激活后再激活。众筹智能合约如何在大量其他提交的投标中认识到这种关系?
    我们描述一种激励的方法,用于监测具有有限gas资源的个人最低限额。简而言之,众筹智能合约奖励提交目标估价x和目标投标组合的用户,如:
    1 x超出目标组合中所有的个人最低出价,并且
    2 目标组合中的出价的投资总额超过x。
    此处设定的目标可包括所有有效出价,但是为了非零,它也必须包括无效出价。上述两个属性足以维护目标组合中的所有(无效的)出价的活性,并且智能合约可以很容易地验证这些条件。我们将此操作附加到第4节中的步骤1。
    每个投标的个人最低费用包括支付给外部用户的固定费用,用以通过上面的操作进行投注。那么同时出现五个招标就会从这五个招标中收取所有费用。奖励应该足以弥补以下情况,即可能发生具有相同目标估值和目标组合的多个投注,但只有第一个获得奖励。请注意,识别目标估值和相应组合的计算复杂度随着投标组合的增长而增长,但对于少于100万个投标的众筹,链下的本地计算时间仍可忽略不计。最后,我们指出,以太坊的SSTORE调用费用为5000 gas,因此,目前的gas限额为670万gas,可以在一笔交易中投注多达1300次竞价。
    8 Conclusion 结论
    本众筹提出了关键的,时效性的,具有挑战性的游戏理论问题。虽然合理的假设和演绎推理可以指导我们的直觉,但最终我们也必须依靠实证证据来得出确定的加密经济的结论。本文讨论的协议提供了一种实现公平估值均衡的手段。
    致谢:作者非常感谢Christian Reitwießner对实施细节的帮助。 我们也感谢Ryan Zurrer富有帮助的意见。

    Reference
    [1] Vitalik Buterin. Analyzing token sale models. http://vitalik.ca/ general/2017/06/09/sales.html, June 2017.
    参考
    [1] Vitalik Buterin。 分析代币销售模式。 http://vitalik.ca/ general / 2017/06/09 / sales.html,2017年6月。

学习建议:
取模运算
https://baike.baidu.com/item/%E5%8F%96%E6%A8%A1%E8%BF%90%E7%AE%97/10739384?fr=aladdin

内点法
http://blog.csdn.net/theonegis/article/details/50977588

内点法介绍(Interior Point Method)
http://blog.csdn.net/dymodi/article/details/46441783

Sort:  

Congratulations @dawns! You have received a personal award!

1 Year on Steemit
Click on the badge to view your Board of Honor.

Do not miss the last post from @steemitboard:

Trick or Treat - Publish your scariest halloween story and win a new badge
SteemitBoard notifications improved

Support SteemitBoard's project! Vote for its witness and get one more award!

Congratulations @dawns! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 2 years!

You can view your badges on your Steem Board and compare to others on the Steem Ranking

Vote for @Steemitboard as a witness to get one more award and increased upvotes!