跳到主要内容

13 篇博文 含有标签「protocol」

查看所有标签

JuiceboxV2 协议

· 15 分钟阅读
Jango
JuiceboxDAO Contributor

现状

首先:非常感谢过去一个月来使用过第一版 Juicebox 协议的所有人。可以看到大家对这套充满实验性的、未经测试的合约和它的用户体验抱有相当的信心,希望它能帮助你们顺利地实现你们的愿景。协议已经帮助一批项目创建了他们的金库和社区,而这些社区反过来又帮助 Juicebox 扎根于以太坊社交层这块肥沃的土壤。

我一直在观察每个项目和协议的交互情况是怎么样的。我参加了一些令人激动的讨论并看到JB让一些想法和创意得以落地,也在一些讨论里不幸地获悉协议并不支持某些提出来的奇思怪想。我亲眼目睹了有人在几小时内就成功创建项目并募得数百个ETH, 也看到有人刚一打开页面就放弃了念头只因为他们点击了按键却丝毫没有反应。上线短短数周,让我对运行良好的方面有了大致的概念,同时也列出一张需要改善的工作清单。

我们的大方向是逐步稳定地推进这些改善工作。但基础合约层的工作一开始就要跨越式进行,以便最终进入一个稳定的状态,因为创新正不断发生在后面的应用层。Juicebox V2就是第一个大的跨越。其目标很简单:支持更多创新并消除所有摩擦点。

Juicebox V1设计思路是基于社区和项目方动机相背这一假设之上的。使用Juicebox就意味着项目方承诺接受一些特定的限制,这样项目的社区会更有信心支持项目玩法的财务安排。项目方不能随意铸币,不能规定每捐赠一个ETH能发行多少代币,不能限制参与筹款的人群,也不能暂停项目。

事实上这在基础协议层就是个错误的假设。如果社区和项目方方向一致,展示全面创新必须有灵活性来加持。事实证明,大部分社区都渴望建立一个既符合社区特质又能在玩法上与众不同的定制金库策略。

但是项目往往没有技术资源来开发、测试和验证这些解决方案。这是 Juicebox 一直以来为人们提供的一项核心价值,同时提供的还有简洁高效的用户界面,方便社区成员的加入及持续参与。迄今为止,Juicebox 所消除的各种摩擦成本证实了引入金库策略约束条件的合理性。

我们来看看现在能否做得更好一点。

提议的变更

自带铸造/销毁策略

你将可以自带合约,合约里概述了你要向社区提议的玩法。你既可以用现成的策略即插即用,也可以自行编写能实现你最疯狂想法的策略。

编写一个策略可以很简单,也可以要多复杂有多复杂。但是必须要提供一个遵守 IFundingCycleDataSource 接口的合约。你可以提供一个策略来决定有人向你的项目付款时怎样处置,也可以提供一个策略用于有人赎回金库代币的场景。

以下是围绕付款来编写策略的工作原理:

你可以添加一个数据源合约来作为一个筹款周期的参数。你的数据源必须提供一个实现以下方法规范的函数。

function payData(
address _payer,
uint256 _amount,
uint256 _baseWeight,
uint256 _reservedRate,
address _beneficiary,
string calldata _memo
)
external
returns (
uint256 weight,
string calldata memo,
IPayDelegate delegate
);

该函数从 Juicebox 协议中接收到一些参数,并需要返回一些参数。

输入:

  • _payer 是支付 ETH 的地址。
  • _amount 是项目收到的 ETH 数量。
  • _baseWeight 是支付行为发生时的筹款周期的权重。这个权重等于前一个周期的权重乘以前一个周期的折扣率。每个项目的第一个筹款周期的权重都是1024
  • _reservedRate 是付款期间筹款周期的保留率。这个百分比的最大值是200。
  • _beneficiary 是付款人指定的接收金库代币的地址。
  • _memo 是付款人在付款中包含的说明。

输出:

  • weight 是 Juicebox 协议在铸造金库代币时应该使用的权重。铸造的总代币数等于amount*weight,其中两个变量都应当是18位精度小数。铸造出来的代币,部分分配给_beneficiary,其余的将按照_reservedRate 分配给保留代币受益人。
  • memo 是包括在协议事件中的备注,该事件将作为支付的结果被发出。
  • delegate(委托) 是遵守 IPaymentDelegate 接口的合约的地址。如果提供了一个委托,一旦完全处理了付款,该委托将收到 Juicebox 协议的一个回调。如果你不需要这个功能,你可以返回零地址。你的委托合约应该实现的回调如下:
function didPay(
address _payer,
uint256 _amount,
uint256 _weight,
uint256 _count,
address _beneficiary,
string calldata memo
) external;
  • _payer 与传递到你的数据源中的相同。
  • _amount 与传递到你的数据源中的相同。
  • _weight 与从你的数据源返回的相同。
  • _count 是为 _beneficiary 铸造的代币的数量。
  • _beneficiary 与传递到你的数据源中的相同。
  • _memo 与从你的数据源返回的相同。

这里可以找到所有这些部分组合在一起的 recordPayment 函数。

数据源和委托可以类似地提供给筹款周期,形成 recordRedemption 函数:

function redeemData(
address _holder,
uint256 _count,
uint256 _redemptionRate,
uint256 _ballotRedemptionRate,
address _beneficiary,
string calldata _memo
)
external
returns (
uint256 amount,
string calldata memo,
IRedeemDelegate delegate
);

输入:

  • _holder 是正在赎回的代币持有人.
  • _count 是赎回的代币数量。
  • _redemptionRate 是赎回时,当前筹款周期的赎回率。
  • _ballotRedemptionRate 是指如果该项目目前有一个活跃的筹款周期重新配置投票合约,则应该使用的赎回率。
  • _beneficiary 是指赎回者指定的地址,该地址用于领取赎回代币获得的金库ETH。
  • _memo 是赎回者在赎回中包含的说明。

输出:

  • amount 是指赎回/销毁 _count 枚代币之后应该从金库发送给 _beneficiary 的 ETH 数额。
  • memo 是包括在协议事件中的备忘录,该事件将作为赎回的结果发出。
  • delegate(委托) 是遵守 IRedemptionDelegate 接口的合约地址。如果提供了一个委托,一旦 Juicebox 协议处理完毕赎回操作,在金额分配给 _beneficiary 之前,该委托将收到来自 Juicebox 协议的回调。如果你不想要这个功能,你可以返回零地址。 你的委托合约应该实现的回调如下:
function didRedeem(
address _holder,
uint256 _count,
uint256 _amount,
address _beneficiary,
string calldata memo
) external
  • _holder 与传递到你的数据源中的相同。
  • _count 与传递到你的数据源中的相同。
  • _amount 与从数据源返回的相同。
  • _beneficiary 与传递到你的数据源中的相同。
  • _memo 与你的数据源中返回的相同。 上述组件构成的recordPayment 函数可以在这里找到.

有了这些新的工具,项目可以推出各种金库策略,例如:

  • 只接受特定地址的付款。
  • 只接受持有某些其他资产的地址付款。
  • 根据区块链的状态,提供不同级别的成员。
  • 限制支付的最小/最大金额。
  • 创建时间加权的奖励。
  • 限制社区代币的最大供应量。
  • 自定义每收到一个 ETH 所分配的金库代币数量。
  • 向新成员铸造 NFT。

...或这些策略的随意组合,以及任何其他你可以通过合约表达的规则。

溢出容差

之前,一个项目只能获得的筹款周期目标以内的资金。所有超过这个目标的溢出金库资金只有金库代币持有人能够获取。

现在,在指定筹款周期目标的同时,你可以指定一个你可以从项目溢出的资金中按需使用的金额。

这对于分配金库资金时的起停控制非常有用,如 Bug 赏金、一次性捐款、审计、NFT 竞标等。

开放铸造/销毁

之前,你只能在收到你的第一笔付款之前铸造代币,而销毁只能通过赎回机制进行。所有其它代币都会纯粹通过支付程序根据筹款周期权重而分配,筹款周期权重亦逐渐根据你配置的折扣率减少。

你现在可以随意铸造和分配新的金库代币。所有的代币持有者现在也可以选择销毁他们的代币,无论出于什么原因。

这给了项目更多的灵活性,以他们想要的方式设计代币经济,同时也能让他们使用到 Juicebox 灵活的内置支付机制以及自动分配机制。

保留代币的分配目标

之前,付款分发对象可以是以太坊地址、其他 Juicebox 项目,以及继承自通用接口的任意合约。而保留代币只能流向以太坊地址。

现在,保留代币的分配也可以指向以太坊地址、其他 Juicebox 项目的所有者,以及继承自这个通用接口的任意合约。

这对于允许项目进行更多可组合的代币分配是很有用的。

支付、提取和赎回都可以暂停。

之前,项目没有快速的方法来暂停社区与金库的互动。

现在,项目能够单独暂停“支付”、“提取资金”和“赎回代币”的函数调用。并且这些控制选项被配置到了每个筹款周期中。

这给项目提供了一些快速实现某些的金库效果的方法。

可调整的费用

之前,所有项目的支出都要支付5%的费用。

现在,项目将最多支付5%的费用,具体可由 JuiceboxDAO 调整。还有一个最高收费价格,可由 JuiceboxDAO 调整。

这有助于 JuiceboxDAO 在其生态系统中吸纳更多的项目和实验。

结论

JuiceboxV2 引入了一套工具,可以实现全新的金库策略。与 V1 相比,不变的是配置被锁定在筹款周期中 —— 如果一个项目在30天的筹款周期中运行,他们可以在筹款周期中指定创造性的动态,但是一旦周期开始,在下一个周期之前就不能进行更改。也和 V1 一样,选择无期限的项目就相当于选择了按需进行任何改变的灵活性。

新合约的实施已经完成,我们现在要做的是记录、测试和审计一切。所有的代码都是公开的,所有的文件和围绕这个升级的对话也将是公开的。

我们需要大家的关注和监督。请不要犹豫,来看一看,帮助我们把事情弄清楚。如果你打算花时间在这上面,请通过 discord来加入我们 DAO 并介绍你自己,这样我们可以确保给你的工作提供合理的报酬。

目前在 Juicebox 上运行的所有项目都将能够无缝地把他们的金库迁移到 V2。

LFG。

JuiceboxDAO 7/17/2021

· 2 分钟阅读
Jango
JuiceboxDAO Contributor

Juicebox 合约两天前部署到了以太坊上面。昨天,负责搭建 Juicebox.money 网站的 @peripheralist 启动了一个自动生成艺术项目 Tiles,http://tiles.art, 这个项目使用 Juicebox 协议来创建金库。他还围绕项目创建了一个 DAO,https://discord.gg/bgGwmjWJ85。

借助 Juicebox,我们构建了一个商业模式协议。通过 Tiles,他创造了一个漂亮、富有表现力以及灵活的自动生成艺术系列来凝聚一个社区。我们之前都不太确定未来的道路将要或应该通向哪里,但我很高兴能够退后一步好并找到这个答案。

我的结论是:从发展的角度来看,我们既可以向外寻找更多能够受惠于使用 Juicebox 的企业家和艺术家,也可以转向 TileDAO 这个目前正在使用 Juicebox 的项目。既然生产转销售 是我的一个宿命,我想目前我作为一个 JBX 代币持有人最应该做的就是加入 TileDAO 并助力它的发展。随着其他项目开始考虑使用 Juicebox,我们的工作就会变成那些社区的支持角色成员。

Juicebox 已经部署

· 8 分钟阅读
Jango
JuiceboxDAO Contributor

这是诠释 Juicebox 协议系列博客的开篇,同时也是我们头几个月的策略。


TLDR: Juicebox 协议的各项合约已经部署到以太坊主网, @peripheralist 搭建了一个非常美观的网站来与这些合约进行互动。

Juicebox 是一个商业模式即服务及可编程的金库,为社区共有的以太坊项目提供服务。

请到 juicebox.money 了解一下。只需一个 gas 优化的交易,就可以开始把 Juicebox 用作你的项目支付终端。

img

以上是一个正在 Juicebox 运营的项目。

动机

长话短说:独立艺术家和开发者、DAO 及更广泛的公共产品,需要一个时尚的方式来捕捉他们所创造的价值,从中获得稳定的现金流,然后再把这些价值回馈给整个世界。

Juicebox 协议提供了这样的方式,允许项目在接收付款之前先承诺项目现金流的分配细则,预先知会用户其资金的去向。作为一个付款终端和可编程金库,这个协议非常适用于可预计成本(人员支出、服务订购、捐款、预算内事项,等等)占比较高的项目,也适合那些希望成功时自动回馈社区的人。

img

工作原理

提交一个 gas 优化的交易,你就可以开始募资发展一个 Juicebox 项目,并配置项目金库的支出明细。

项目部署之后,任何人都可以通过作为捐赠人在 juicebox.money 上直接付款,或者使用其他合约把费用集合到 Juicebox 协议,来资助你的项目。不管采取哪种方式,他们都会相应地获得项目分发的社区代币。

img

人们可以通过类似 Juicebox.money 的界面来直接向你付款。

img

又或者,项目可以通过继承 JuiceboxProject.sol 并使用 _takeFee 来以合约方式接受付款。作为项目方,你可以设置一个筹款目标,明确创建及运营这个项目一段固定的时间所需要花费的资金。你可以在收到任何资金之前就设置这个目标。如果你的项目在某个固定时间内赚取的资金比筹款目标要多,那么你的支持者们和你一样,都可以通过销毁代币来赎回溢出的资金。随着使用量的增长,这样实质上把所有人向项目付款的成本推向零。

未领取的溢出就可以作为项目的持续运营资本。

这样一来,项目团队和社区就会同心协力确保溢出的增长速度大于支出速度。

img

筹款周期自动滚动,这样赞助人和收费合约就可以在能力范围内持续地资助他们重视的项目。你可以配置折扣率来激励早期支持者,配置联合曲线比率来鼓励社区成员作出承诺,配置保留率以便每次有人付款并获得代币的同时你也可以分得一些自己的代币。

随时间的演进,项目方可以重新评估他们的资金需求及周期配置,并且可以在向 Juicebox 协议发布这种变更的同时,选择把代币持有人的观点也考虑在内。


有几种方案可以配置你的 Juicebox 项目。以下是一些很酷的做法:

  1. 可以把你的收入流中转到 Juicebox 合约。 例如,你可以创建另一版本的 Uniswap,明确每个月只需要 $X 来维持运作(人员成本、运营成本),而每一笔兑换交易会收取一笔交易费用($Y) 以维系这个服务。如果某个月有足够的交易量(N)使 N * $Y > $X,那么后续的每一笔交易,所有兑换过(也就是付过费)的账户都会按他们之前为项目的存续作出贡献的份额从超额收入中获得分红。因此,如果 N * $Y 的增长速度不合常理地高于 $X(这正是 Juicebox 项目要打破的当前市场寻租造成的低效率),每个人的投入成本都会趋于零,而不是出现复合的股东财富聚集的情况。 ​这就意味着,人们可以获得一个几乎免费的社区驱动产品,这个产品不需要广告,数据完整性有保障,有健全的商业运作问责制度,还拥有一个运行可靠的开源代码库。所有这一切都是由充满干劲的朋客们一手搭建的,他们不但收获了满意的报酬,而且还会跟社区一同受惠于溢出的增长。
  2. 要安排财务上的依赖性也不难,你的 Juicebox 项目的筹款目标可以通过合约来与项目仰赖的人或其他项目的筹款目标实现挂钩。
  3. 你可以举办一个经常性或一次性的募资活动,超募资金既可以返还给你的社区,也可以投放到其他项目。
  4. 作为项目方,每次收到付款你都可以同时获得自己分发的代币。这些代币的价值将按项目溢出增长的速度进行“释放”,而不是按照某个几年期的股权授予计划。然后,这些保留代币可以通过合约来分配给项目的工作人员或者其他项目。

如今,最令人激动的莫过于在以太坊、用以太坊、为以太坊来进行工作了 — 每天我们的加密钱包生活都会迎来很多新的创想家,精彩纷呈的各种实验已然成了家常便饭。这是一个创造者的梦想:不需要自己来管理各种基础设施,发展源自社区的驱动,财务预期可以通过代码来锚定。Juicebox 协议就是一个创造出来朝着这个方向推动的工具。

如果你有疑问或者想贡献自己的力量,就请赶紧加入我们的 Discord吧。