Smart Contract Freeze Update

Chintai has been live for nearly two weeks. The first several rounds of orders have come to a close. The smart contract functioned properly throughout the lifecycle of each trade. However, while pioneering the frontiers of EOS.io based applications has been exhilarating, we’ve also encountered inevitable growing pains. As trail blazers, the issues we encounter together effectively subsidize the future of application development on the EOS mainnet.

We’ve been continuously humbled by the technical difficulty we’ve encountered while developing Chintai. Furthermore, we thoroughly appreciate the community’s patience as we resolve inevitable issues.

Leading up to the scheduled maintenance on 10/15 at 18:00 UTC, we discovered an issue that necessitated freezing the smart contract.

First and foremost, we’d like to assure the EOS community that the decision to freeze the smart contract is not related to loss of funds. Orders are secure and all funds are safe. However, we discovered an issue related to an intentional design limitation in the EOS core code that has caused problems for the Chintai exchange, i.e. To prevent overuse of RAM, EOS core code does not permit accounts to undelegate resources multiple times within a 72 hour period. Consequently, functionality needed for advanced applications like Chintai or actions such as voting in a DEX are not possible.

When orders are consumed the Chintai smart contract creates two deferred transactions. Deferred transactions automate the trade lifecycle. The first deferred transaction establishes the point in time that leased bandwidth is undelegated from the borrower. Initiating the undelegation process also starts the 72 hour “unstaking countdown timer” that is built into the EOS core code. After the 72 hour unstaking period, the second deferred transaction sends borrowed EOS back to the lenders account.

Unfortunately, every time the undelegate bandwidth function is initiated the 72 hour unstaking timer resets. Consequently, the unstaking period never manages to unstake for the full 72 hours, effectively “locking” funds. This issue has resulted in an overall lack of liquid EOS to return to lenders. Furthermore, the liquidity in the Chintai account (from open orders) is being given to people whose orders are finished.

Interim Solution

  • Starting 15th October, the Chintai Exchange will be frozen for four full days. This will give us time for the 72 hour unstake period to complete without resetting. Everyone who should have received EOS back from 10/15–10/18 will receive their EOS after the “freeze period”.
  • For all existing and new orders moving forward, we will be implementing a solution whereby the undelegate action will be initiated every three days, effectively guaranteeing liquidity to return to lender accounts.
  • We appreciate that this solution is not ideal and puts a burden on lenders. Lenders will need to anticipate an unstaking period of six days. Therefore, we are working on a long-term solution that will thoroughly address the underlying issue in the EOS core code.
  • We expect to be up and running by 19th October.

Long-term Solution

  • We’ve reached out to block.one and have proposed a change to be implemented in the EOS code. The change will allow future smart contracts to call the undelgate bandwidth function multiple times without resetting the 72 hour timer.
  • After Block.one has included this solution in the next system update, Chintai will resume the accustomed three day unstaking period.
  • The Pull-Request will be submitted in the next 24–36 hours. You can track the progress here: https://github.com/EOSIO/eos/issues/6005
  • The result of this change is system-wide. Future dApps will also be afforded the luxury of making multiple undelegate calls. This feature will be essential for DEX’s and other dApps that require multiple undelegate calls.

Roadmap

After the long-term solution in the EOS core code is implemented, we will be investigating ways to limit the unstaking period to enable token leasing that does not burden lenders with any wait times. Stay tuned for updates.

More questions? Come to the CHINTAI TELEGRAM

Chintai Lease Account

EOS42 — Pioneering a Decentralized Future

WEBSITE

STEEM

MEDIUM

TWITTER

EOS42 TELEGRAM

CHINTAI TELEGRAM

EOS42 PROJECTS:

CHINTAI

EOS911

Chinese translation:

Chintai 智能合约冻结的公告更新

Chintai已经运行了将近两个星期。最早的几轮租赁订单已经结束。Chintai智能合约的每笔交易也正常执行。然而,虽然开拓EOS.io应用之前沿是一件令人振奋的事,但成长的烦恼也是我们不可避免的。作为开拓者,我们共同遇到的问题将会对未来EOS应用开发带来宝贵的参考资料。

我们在开发Chintai的过程中所遇到的技术难题让我们一直保持着谦卑的态度。此外,在我们解决这些不可避免的问题的同时,我们为社区对Chintai的耐心感到非常的荣幸。

在10月15日18:00 UTC(北京时间10月16日凌晨两点)的定期维护之前,我们发现了一个需要冻结Chintai智能合约的问题。

首先,我们想请EOS社区放心,冻结智能合约的决定并不是因为资金流失。全部的订单和资金都是安全的。但是,我们发现了一个与EOS核心代码所刻意设计的限制相关的问题,该问题导致了Chintai交易所不能正常地运作。

当订单撮合成功时,Chintai智能合约会创建两个延时交易(deferred transaction)。这两个延时交易会对订单生命周期进行自动化设定。第一个延时交易是为了确定在什么时间点被租带宽会从租客(borrower)身上解除授权而赎回(undelegate)。在启动此赎回的过程中,它会同时启动内置到EOS核心代码中的72小时“赎回倒计时器(unstaking countdown timer)“。在过了72小时后,第二个延时交易的作用是将被租的EOS转回到出租方(lender)的账户。

不幸的是,当每次调用赎回带宽的函数(undelegate bandwidth function)时,72小时倒数器会被自动重置。 这个机制会导致Chintai智能合约将资金“锁定“。这个问题导致了智能合约没有足够的流动EOS返还给出租方。此外,这也导致了Chintai账户(来自未撮合订单)的流动 EOS 被转给那些订单完成的账户。

临时解决方案

- 从10月15日开始,Chintai 交易所将会被冻结四天。这将允许我们在无需重置的前提下等待72小时的赎回周期结束。那些应该在10月15日至10月18日期间收到EOS的用户,将会在冻结期结束之后收到他们的EOS。

- 从现在开始,对于所有现有的和新的订单,我们将会实施一个每三天请求一次赎回的解决方案,以有效地保证有足够的流动 EOS 会返还到出租方的账户。

- 我们理解此解决方案并不是一个理想的方法,并且它也为贷款人带来了负担。出租者预计需要六天的赎回周期。因此,我们正在制定一个长远的解决方案,以彻底解决EOS核心代码所造成的潜在问题。

- 我们预计Chintai将会在10月19日之前恢复运行。

长期解决方案

- 我们已经联系了Block.one并提议他们将EOS核心代码进行修改。此更新将会使未来的智能合约拥有可以多次发起请求赎回带宽资源(undelegate bandwidth function)的功能,而无需重置72小时倒计时器。

- 当Block.one在下一次的系统更新中包含此解决方案后,Chintai将会恢复三天赎回周期的初始设置。

- 代码合并请求将在未来的24–36小时内提交。您可以在此处跟踪进度:https://github.com/EOSIO/eos/issues/6005

- 此变更将会是全系统性的。未来的dApps也将会获得可以多次请求赎回的功能。这对去中心化式交易所(DEX)和其他需要多次请求解除带宽资源赎回功能的dApp至关重要。

路线图

在EOS核心代码的长期解决方案之后,我们将会继续研究各种能够缩减赎回周期的方法,以其出租者在进行代币租赁时候,不需要额外的等待时间。

敬请您密切关注Chintai的更新。

EOS42 — 开创一个去中心化的未来

[한국어]

<스마트 컨트랙트 임시중지 공지>

Chintai는 지난 2주 동안 서비스되었고 초기에 이루어졌던 몇 차례의 주문들이 마감되었습니다. 친타이의 스마트 컨트랙트는 각 마켓의 기간에 따라 올바르게 작동해 왔습니다. 그러나, EOS.io 기반 앱의 개척자로서 이에 기뻐하고 있는 동시에 저희는 피할 수 없는 문제를 겪게 되었습니다. 이 문제에 대한 해결은 미래 EOS 메인넷 dApp 개발에 많은 도움이 될 것입니다.

저희는 Chintai를 개발하는 동안 저희가 직면한 기술적인 어려움에 대해 지속적으로 인정하고 발전해 오고 있습니다. 이런 문제 해결에 기다려주시는 커뮤니티 여러분의 인내에 감사 드립니다.

예정되었던 UTC 18:00시에 10/15에 예정된 유지 보수를 준비하면서 저희는 스마트 계약을 중단해야 하는 문제가 있음을 발견했습니다.

가장 먼저 스마트 컨트랙트를 임시중지 하겠다는 결정은 여러분의 자금 손실과 관련이 없다는 것을 확신시켜 드리고 싶습니다. 주문들은 안전하며 모든 자금은 안전합니다. 그러나 저희는 Chintai 거래소에서 문제를 일으킨 EOS 코어 코드 안의 설계 제한과 관련하여 문제를 발견했습니다. 이는, RAM의 과도한 사용을 방지하기 위해 EOS 코어 코드가 72 시간 내에 여러 번 대역폭(CPU, NET)을 언스테이킹(unstaking) 할 수 없게 하는 부분입니다. 결과적으로 Chintai와 같은 고급 응용 프로그램의 이용 또는 탈중앙화 거래소 안의 투표와 같은 작업에는 이를 해결하는 장치가 필요하게 됩니다.

주문이 소비될 때 Chintai 스마트 컨트랙트는 “두개”의 지연된 트랜잭션 (deferred transactions)을 생성합니다. 지연된 트랜잭션은 이 주문을 자동화 시킵니다. 첫번째 지연된 트랜잭션은 임대차 된 대역폭이 임차인으로부터 언스테이킹 되는 것을 설정합니다. 이 언스테이킹 (undelegation) 프로세스를 시작하면 EOS 코어 코드에 내장된 72시간의 “언스테이킹 카운트다운 타이머” 도 시작되고, 이 시간이 다 되면 두 번째 지연된 트랜잭션은 EOS원금을 임대인에게 보내게 됩니다.

여기서 문제점은 대역폭 언스테이킹 기능이 여러 번 행해질 때마다 이 72시간 타이머가 리셋되는 부분입니다. 결과적으로 언스테이킹이 여러 번 있을 시 unstaking 시간이 다 채워지지 못하고 리셋 되어 버린 것입니다. 이 문제로 인해 일부 EOS가 임대인에게 제시간에 되돌아 가지 못하고 다시 잠겨있게 되었습니다.

<임시 솔루션>

  • 10 월 15 일부터 Chintai 서비스는 4 일간 중지됩니다. 이렇게 하면 재설정 없이 72 시간의 언스테이킹 기간을 완료 할 수 있습니다. 10/15–10/18 에 EOS 를 다시 받아야 했던 모든 사람들은 이 점검 기간 후에 EOS 를 돌려 받게 됩니다.
  • 앞으로의 임시 솔루션으로, 저희는 자원회수 (언스테이킹) 프로세스를 3 일 (72시간 마다)에 한번씩만 행할 것입니다. 따라서 유동성의 문제없이 임대인 계좌로 EOS 돌아가도록 보장하는 솔루션을 구현할 것입니다.
  • 저희는 이 솔루션이 완벽한 것은 아니며, 임대업자에게 추가 시간이 걸릴 수 있다는 점에 양해를 부탁 드립니다. 위 솔루션으로 인해 임대인은 임대차 기간 종료 후, 최대 6 일간의 원금회수 시간을 예상해야 합니다. 따라서 EOS 핵심 코드의 근본적인 문제를 해결한 장기적인 솔루션을 개발 중입니다.
  • 저희 서비스는 10 월 19 일에 다시 운영 될 예정입니다.

<장기적인 솔루션>

  • 저희는 block.one에 연락을 취했으며 EOS 코드에서 구현할 수정사항을 제안하였습니다. 이 변경은 미래에 스마트 컨트랙트들이 72시간 타이머가 리셋되지 않고도 대역폭 언스테이킹을 여러 번 호출할 수 있게 합니다.
  • 블록원이 이 솔루션을 시스템 업데이트에 포함시키면, 기존의 방식대로 임대종료 직후 3일(72시간) unstaking이 시작되게 적용시킬 것입니다.
  • 깃헙의 Pull-Request는 24–46시간 안에 제출될 것입니다. 진행 상황은 https://github.com/EOSIO/eos/issues/6005 에서 확인할 수 있습니다.
  • 저희의 제안에 대한 변경 결과는 이오스 시스템 전체에 적용될 것입니다. 미래의 다른 dApp들 또한 여러 번 언스테이킹을 호출할 수 있게 될 것입니다. 이 기능은 DEX 및 언스테이킹이 여러 번 이루어 져야 하는 dApp 들에게는 필수적이게 될 것입니다.

<로드맵>

EOS 코어 코드에 장기적인 솔루션이 적용 된 뒤에 임대자에게 언스테이킹 대기시간에 대한 부담을 주지 않고 토큰 임대를 가능하게 하는 방법을 개발하고 적용시킬 것입니다. 업데이트를 기다려 주세요.

EOS42 — Pioneering a Decentralized Future