From c9687e48e635bc269f4ee5938dd4877e4d79926b Mon Sep 17 00:00:00 2001 From: Alessio Treglia Date: Tue, 12 Feb 2019 09:37:39 +0000 Subject: [PATCH 01/20] Upgrade to tendermint 0.30.0 final --- Gopkg.lock | 2 +- Gopkg.toml | 2 +- PENDING.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gopkg.lock b/Gopkg.lock index adfaff7193..7ea599db92 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -502,7 +502,7 @@ "version", ] pruneopts = "UT" - revision = "v0.30.0-rc0" + revision = "v0.30.0" [[projects]] digest = "1:b73f5e117bc7c6e8fc47128f20db48a873324ad5cfeeebfc505e85c58682b5e4" diff --git a/Gopkg.toml b/Gopkg.toml index b59da1a61b..e24077be58 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -40,7 +40,7 @@ [[override]] name = "github.com/tendermint/tendermint" - revision = "v0.30.0-rc0" + revision = "v0.30.0" [[constraint]] name = "github.com/zondax/ledger-cosmos-go" diff --git a/PENDING.md b/PENDING.md index 861cce4314..a41bbe0ca3 100644 --- a/PENDING.md +++ b/PENDING.md @@ -36,7 +36,7 @@ IMPROVEMENTS * SDK * Tendermint - + * [\#3618] Upgrade to Tendermint 0.30.03 BUG FIXES From fe47c103f25e7653b91da6bee45d937e13aea199 Mon Sep 17 00:00:00 2001 From: Jack Zampolin Date: Tue, 12 Feb 2019 15:57:59 -0800 Subject: [PATCH 02/20] Add kr and cn translations of blog 1 --- docs/gaia/launch/blog-1-cn.md | 71 ++++++++++++++++ .../launch/{launch-blog-1.md => blog-1-en.md} | 0 docs/gaia/launch/blog-1-kr.md | 82 +++++++++++++++++++ 3 files changed, 153 insertions(+) create mode 100644 docs/gaia/launch/blog-1-cn.md rename docs/gaia/launch/{launch-blog-1.md => blog-1-en.md} (100%) create mode 100644 docs/gaia/launch/blog-1-kr.md diff --git a/docs/gaia/launch/blog-1-cn.md b/docs/gaia/launch/blog-1-cn.md new file mode 100644 index 0000000000..e2298c0090 --- /dev/null +++ b/docs/gaia/launch/blog-1-cn.md @@ -0,0 +1,71 @@ +# Cosmos Hub主网上线计划 + +* 2016年夏天,Cosmos首次发表了项目白皮书。 +* 2017年春天,Cosmos完成了首次募资。 +* 2019年一月,Cosmos Hub软件完成功能开发。 +* 至此,Cosmos Hub主网即将启动。 +* 那么,Cosmos 主网上线将为Cosmos通证(Atom)的持有者带来什么呢? + +如果你是一个Atom通证的持有者,你可以将通证委托给主网的验证人并参加对链上治理提案的投票。 实际上,通证持有者的委托和参与治理对于未来网络的成功具有决定性的意义。 然而,通证持有者暂时还不能在网络上实现交易。 在下一个允许交易的硬分叉启动之前,交易协议是关闭的。 + +**Atom通证持有人务必仔细阅读以下内容,以保障您的通证能够安全委托给验证人。在您开始实际操作前,请先仔细阅读整个CLI指南并熟悉所有命令** + +* [CLI指南](https://github.com/cosmos/cosmos-sdk/blob/develop/docs/gaia/delegator-guide-cli.md) + +CLI指南中所介绍的流程是至今为止唯一经过验证的在主网实现通证委托的安全途径。这是因为指南中用到的gaiacli工具是唯一正在进行第三方安全审计的数字钱包软件,目前尚没有其他数字钱包供应商通过类似的安全审计。 + +请记住,通证委托有一定风险。 一旦您将通证委托给了一个验证人,通证将在委托期内锁定,无法回收。 如果在这段时间内,被委托的验证人有任何违规行为,您的部分或者全部通证将被罚没焚毁。因此,在委托前,您有责任对验证人进行尽职调查。 + +**Cosmos Hub主网仍然是个实验型的网络。在主网的早期,估计仍会出现一些问题,比如软件升级,或发现新的漏洞。现有的工具要求使用者具有很高的专业技术能力,并且可能还会存在我们跨链基金会或者Tendermint团队无法控制的风险(请见跨链 Cosmos 贡献条款中的风险部分条款)。使用Cosmos Hub开源软件需要遵守Apache 2.0授权协议,使用者需要自己承担所有风险,而且软件将依照“现状”提供,不提供任何形式的保证或条件,并且跨链基金会和/或Tendermint团队不对因软件引起的损失承担任何责任。所以,务必请谨慎行事!** + +* [跨链 Cosmos 贡献条款](https://github.com/cosmos/cosmos/blob/master/fundraiser/Interchain%20Cosmos%20Contribution%20Terms%20-%20FINAL.pdf) +* [Apache 2.0授权协议](https://www.apache.org/licenses/LICENSE-2.0) + +如果您希望获得更多关于通证委托的介绍并且愿意和Cosmos的开发者做直接的交流,您可以参加我们2月14日的线上直播,在直播中我们将介绍主网启动后通证委托的整个流程。 + +注册链接:[gotowebinar.com/register/](https://register.gotowebinar.com/register/5028753165739687691) + +## 主网启动的里程碑 + +欢迎收藏[cosmos.network/launch](https://cosmos.network/launch),跟踪主网启动全过程。 + +* Cosmos-SDK 安全审计✔: 在1月初,Cosmos-SDK启动了2019年一季度计划进行的一系列第三方安全评估的第一个评估项目。此次安全评估审计持续2周半的时间,2个不同的安全审计公司对Cosmos-SDK各部分做了安全评估,而第三家安全审计公司的评估工作也正在进行中。 +* Cosmos-SDK正式发布版本: RC版本一旦完成,Cosmos-SDK的功能在主网上线前将不再变更,此后Cosmos-SDK团队将开始一轮内部漏洞检测,以便进一步确保在发布前完成最终的安全性检查。Cosmos-SDK v0.31.0 一发布,我们将启动一个新的Gaia测试网,以便在实际运行环境中找到那些在测试中难以被发现的漏洞。 +* 权益争夺赛结束: 2018年12月启动的权益争夺赛(GoS)是同类区块链网络的第一个对抗性的测试网络。GoS旨在对纯PoS网络中的经济激励和社区协作进行压力测试。到目前为止,GoS区块链网络已经完成了3次硬分叉。GoS任务结束后,我们将通过记分准则来判断获胜者,并且在整个活动结束时宣布对获胜者的奖励。[GoS记分准则](https://github.com/cosmos/game-of-stakes/blob/master/README.md#scoring) +* 创世交易的收集: 跨链基金会将对创世时Atom通证的分配情况发布一个议案,提出了对Cosmos投资者,参与者,早期贡献者和权益争夺赛的获胜者的通证分配方案。任何被推荐获得通证分配的个人(或机构)都可以提交一个gentx文件,只有提交了该文件才有可能在主网启动创世时成为Cosmos验证人。推荐分配数量和gentx收集的最终结果将保存在创世genesis文件中 +* Cosmos Hub 主网启动🔥 🚀 🌔🔥: 一旦社区接受了genesis文件, 并且占有2/3以上投票权的验证人们上线,Cosmos主网就可以启动了。 + +## Cosmos官方交流渠道 + +**以下是Cosmos有关主网启动的官方渠道** +* Cosmos Network (twitter.com/cosmos) +* Cosmos GitHub (github.com/cosmos) +* Cosmos Blog (blog.cosmos.network) +**请注意Cosmos forum,Riot群,和Telegram群将不被视为官方信息发布渠道。** +* [Cosmos forum](https://forum.cosmos.network) +* [Riot群](https://riot.im/app/#/group/+cosmos:matrix.org) +* [Telegram群](http://t.me/cosmosproject) + +如果你对下一步应该做什么或者消息来源的可信度还有什么疑虑,那么在启动时请先不要有任何行动,您可以关注以上三个Cosmos官方渠道发布的最新情况,另外不要向任何管理员、网站或者非官方软件提供您的助记词。 + +切记,我们绝不会要求您提供您的私钥或者助记词。 + +## 在主网启动期间确保资产安全可靠 + +任何公链启动都会令人十分激动,但同时也会有一些唯利是图的人趁机作恶。自人类起源,社会工程学就已经存在了,在当今技术时代,网络钓鱼和鱼叉式网钓是利用社会工程学原理实行欺诈的主要形式。这两种攻击方式都非常有效,95%以上的账户安全漏洞都是由这两种攻击造成的,而且现在也不仅是通过电子邮件来发动攻击这么简单了。今天,网络钓鱼可能会随机或有针对性地发生在您所有的信息接收渠道,无论您是使用Signal,Telegram,SMS,Twitter或只是在论坛、社交媒体上接收信息,都有可能受到网络攻击,盗取您的重要信息和资产。 + +虽然作恶者的攻击听起来很可怕,但我们仍可以做很多事情来保护自己免受各种攻击。在准备主网启动期间,我们有必要为您提供一些培训来提高您发现和规避安全风险的能力,提供验证信息的可靠渠道,并通过一些技术手段来减少或避免关键风险和证件被窃风险。 + +## 安全规则 + +#### 参与Cosmos主网启动,您需要熟记以下规则: + +* 直接从官方来源下载软件,并确保在您进行助记词相关的任何操作时始终使用最新、最安全的gaiacli版本。最新版的Tendermint,Cosmos-SDK和gaiacli只能从我们官方GitHub仓库中获取,从这些渠道下载可避免上当受骗,避免使用恶意修改的软件版本。 +* 不要将助记词告诉给任何人,你是助记词的唯一保管人。如果有人试图为您的Atom提供托管服务,那么就要警惕了:为了避免对通证失去控制,您应该将其离线存储,最大限度降低被盗风险,并制定安全的备份策略,永远不要与任何人分享。 +* 对于在区块链或加密货币环境中要求您访问来自可疑或不熟悉网站的附件或电子邮件要保持警惕。攻击者可能会试图引诱您访问虚假网站,以从您的计算机窃取敏感信息。如果您是Gmail用户,[请在此处对钓鱼邮件进行测试](https://phishingquiz.withgoogle.com)。 +* 在购买Atoms之前,请做好充分的信息调研。通证在主网启动时是不允许交易的,所以它们不能进行买卖。只有到实现交易功能的硬叉发布后才能实现通证的在线交易。通证的在线交易功能实现后,请首先对卖方和交易所进行全面调研,确保Atom通证的来源可信。 +* Tendermint团队和跨链基金会都不会出售Atom通证,所以,如果您在社交媒体或者电子邮件中看到我们发出的通证销售广告,请不要相信,一定是假的。 +* 对于来自论坛或者技术交流群中的陌生人提供的技术建议必须保持警惕!您需要熟悉所有重要的指令,特别是那些可能存在高风险的操作指令。您可以查阅我们的官方文档,以避免上当受骗,损害自身及他人的利益。请牢记:Cosmos论坛,Riot群,和Telegram群都不是Cosmos官方信息或者新闻的发布渠道。 +* 在发送交易前再次确认交易。链上地址的确很长,但请仔细检查,确保交易发送到正确的地址,防止错误发送。 + +如果突然出现的交易极具诱惑,或显示的消息要求您提供永远不应该与其他人分享的信息,您就应该立刻通过Cosmos网站或者其他官方渠道来验证这些信息。请再次牢记,来自Cosmos,Tendermint团队或跨链基金会的任何人都不会发送电子邮件要求您提供任何类型的帐户凭据或您的助记词,我们仅会通过我们的官方博客,Twitter和GitHub帐户与Cosmos社区沟通重要新闻和进展。 diff --git a/docs/gaia/launch/launch-blog-1.md b/docs/gaia/launch/blog-1-en.md similarity index 100% rename from docs/gaia/launch/launch-blog-1.md rename to docs/gaia/launch/blog-1-en.md diff --git a/docs/gaia/launch/blog-1-kr.md b/docs/gaia/launch/blog-1-kr.md new file mode 100644 index 0000000000..67c926fdca --- /dev/null +++ b/docs/gaia/launch/blog-1-kr.md @@ -0,0 +1,82 @@ +# 코스모스 허브 메인넷의 시작 + +#### 런칭 준비 체크리스트 & 안전하게 아톰 수령하기 + +2016년 여름, 코스모스 [백서가](https://cosmos.network/resources/whitepaper) 세상에 공개되었습니다. 이후 2017년 봄, 코스모스의 [펀드레이저가](펀드레이저가) 성공적으로 완료되었습니다. 그리고 2019년 2월, 코스모스의 소프트웨어[가 기능 완성](https://github.com/cosmos/cosmos-sdk/releases/tag/v0.31.0)(feature complete)단계에 도달했습니다. 이제 코스모스 허브의 런칭을 앞두고 있는 이 시점에서, 아톰 보유자들은 무엇을 해야될까요? + +아톰 보유자는 메인넷에서 본인의 아톰을 검증인에게 위임하고 거버넌스 프로포절에 투표를 할 수 있는 권리를 가질 수 있게 됩니다. 어떻게 보면 위임자들의 선택이 코스모스 네트워크의 성공을 좌우할 수 있다고 볼 수 있습니다. 단, 런칭 초기 아톰 송금 기능은 프로토콜 레벨에서 비활성화될 계획이며, 추후 하드포크를 통해 활성화될 것입니다. + +**📒 안전하게 아톰을 위임하기 원하는 아톰 보유자들은 다음 가이드라인을 숙지하시고 따르시기 바랍니다. 본인의 안전을 위해서 [CLI 사용법](https://github.com/cosmos/cosmos-sdk/blob/develop/docs/gaia/delegator-guide-cli.md)을 충분히 숙지하기 전에는 별도의 행동을 하시지 않는 것을 추천해 드립니다.** + +안전하게 아톰을 위임하는 방법은 이 가이드에 설명된 것 외에는 없습니다. 현재로써 `gaiacli` 외 보안 감사를 거친 월렛 소프트웨어는 없습니다. 다른 월렛은 보안 감사를 시작하지 않은 상태입니다. + +추가로 아톰을 위임하는 행위에는 매우 큰 리스크가 존재한다는 점을 인지하셔야 합니다. 한번 검증인에게 위임된 아톰은 일정 기간동안 묶이게 되며, 이 스테이킹 기간 동안 검증인의 실수로 슬래싱(아톰 삭감)이 발생하는 경우 위임자의 아톰 또한 함께 삭감될 수 있습니다. 검증인들에 대한 충분한 정보를 미리 확인하고 위임을 진행하는 것은 각 위임자의 책임입니다. + +**코스모스 허브는 매우 실험적인 소프트웨어입니다. 메인넷 초기에는 다수의 문제, 업데이트 그리고 버그가 존재할 수 있습니다. 현재 제공되는 도구를 사용하는데에는 상당한 기술적 실력이 필요하며, 인터체인 재단과 텐더민트 팀의 컨트롤 밖에 있는 리스크가 존재합니다 (관련 리스크에 대한 자세한 정보는 인터체인 [코스모스 펀드레이저 약관](https://github.com/cosmos/cosmos/blob/master/fundraiser/Interchain%20Cosmos%20Contribution%20Terms%20-%20FINAL.pdf)을 참고하세요). [아파치 2.0 라이선스](https://www.apache.org/licenses/LICENSE-2.0) 기반의 오픈 소스 소프트웨어를 사용함으로 발생하는 리스크는 본인의 책임이며, 어떠한 보증과 조건이 따르지 않습니다. 소프트웨어 사용으로 발생하는 문제에 대해서 인터체인 재단과 텐더민트는 책임을 지지 않습니다. 상당한 주의를 기울이며 신중하게 진행하시기 바랍니다.** + +만약 위임 절차에 대한 질문이 있거나, 코스모스 개발자들과 대화를 나누고 싶으시다면 2월 14일에 열리는 온라인 밋업에 참가해주세요. 해당 밋업에서 런칭 때 아톰을 위임하는 절차를 한 단계씩 설명해 드릴 예정입니다. + +등록 링크: [gotowebinar.com/register/](https://register.gotowebinar.com/register/5028753165739687691) + +## 런칭을 위해 남은 마일스톤 + +🚦메인넷 런칭 프로세스를 확인하기 위해서는 다음 링크를 참고하세요: [cosmos.network/launch](https://cosmos.network/launch) + +### 5: 코스모스 SDK 보안 감사 ✔ +지난 1월, 코스모스 SDK는 다수의 외부 보안 감사 절차의 첫 단계를 진행했습니다. 보안 감사는 약 2주 반 기간에 걸려 진행되었습니다. 현재 두 개의 기관이 코스모스 SDK 코드를 검증한 상태이며, 다른 한 개 기관의 보안 감사가 진행 중입니다. + +### 4: 코스모스 SDK 기능 동결 (feature freeze) +코스모스 SDK의 최종 주요 수정 사항은 [SDK v0.31.0 RC에](https://github.com/cosmos/cosmos-sdk/projects/27) 반영되었습니다. 해당 RC(Release candidate)가 완료된 후, 코스모스 SDK 팀은 추가적인 디버깅을 진행하여 런칭 전 보안성 확보를 위해 노력을 기울일 예정입니다. + +코스모스 SDK v0.31.0이 릴리즈된 후, 혹시라도 발견되지 않은 버그를 검증하기 위해 Gaia 테스트넷을 추가로 진행할 계획입니다. + +### 3: 게임 오브 스테이크 완료 +지난 2018년 12월, 사상 최초의 경쟁적 테스트넷인 게임 오브 스테이크(GoS, Game of Stakes)가 시작되었습니다. GoS의 목표는 경제적 인센티브 검증, 지분증명으로 보안이 유지되는 블록체인의 사회적 요소를 검증하기 위해 진행되었습니다. 이후, GoS는 무려 3번의 하드 포크를 성공적으로 진행했습니다. GoS가 완료된 후, 점수 측정 기준을 기반으로 우승자를 발표하게 될 계획입니다. + +### 2: 제네시스 트랜잭션 모으기 +제네시스 시점에서 인터체인 재단은 아톰 분배 권고를 작성합니다. 여기에는 코스모스 펀드레이저 참가자, 초기 기여자, 게임 오브 스테이크 우승자 등이 포함됩니다. 아톰 분배 권고 목록에 포함된 인원은 `gentx`를 제출할 수 있으며, 제네시스 검증인이 되기 위해서 `gentx` 제출은 필수입니다. 이후 모든 `gentx` 파일이 모이게 되면 최종 제네시스 파일이 만들어집니다. + +### 1: 코스모스 허브 메인넷 런칭 🔥 🚀 🌔🔥 ++⅔의 보팅 파워가 온라인 상태가 되고, 커뮤니티가 제네시스 파일을 승인하게 된다면 코스모스 메인넷이 시작됩니다. + +## 공식 코스모스 소통 채널 +런칭 관련 소식을 전하는 공식 소통 채널은 다음과 같습니다: + +* 코스모스 트위터 (twitter.com/cosmos) +* 코스모스 깃허브 (github.com/cosmos) +* 코스모스 블로그 (blog.cosmos.network) + +또한 [코스모스 포럼](https://forum.cosmos.network/), [라이엇 그룹 채팅](https://riot.im/app/#/group/+cosmos:matrix.org) 그리고 [텔레그램 방](http://t.me/cosmosproject)은 코스모스의 공식적인 소식을 전달하는 채널이 아니라는 것을 인지하시기 바랍니다. + +만약 앞으로 진행해야 하는 절차가 어렵거나 특정 정보의 소스를 확인할 수 없는 경우, 초기 시점에서 아무 행동을 하지 않고 위 3개의 공식 채널로 전달되는 업데이트를 확인하시기 바랍니다. 12개의 시드 단어를 그 어떤 단톡방 관리자, 웹사이트, 비공식 소프트웨어에 제공하지 마십시오. + +**코스모스 팀은 절대로 개인적인 채널을 통해 프라이빗 키 또는 시드 단어를 요청하지 않습니다.** + +## 메인넷 런칭때 안전할 수 있는 방법은? + +런칭 시기가 다가오며 코스모스 허브 메인넷에 대한 기대감 또한 커지고 있습니다. 하지만 이런 시기를 틈타 일부는 본인의 이득을 위해 악의적이 행동을 할 확률 또한 높습니다. [사회 공학](https://terms.naver.com/entry.nhn?docId=863068&cid=42346&categoryId=42346) (social engineering)을 이용한 범죄는 인류 역사에서 꾸준히 있었으며, 오늘까지 [스피어피싱](https://terms.naver.com/entry.nhn?docId=3434661&cid=40942&categoryId=32828)과 [피싱 공격](https://terms.naver.com/entry.nhn?docId=3432525&cid=58445&categoryId=58445) 같은 일종의 범죄 수단으로 이어지고 있습니다. + +약 성공한 공격의 95%는 스피어피싱과 피싱 공격으로 이루어졌으며, 이메일 외의 다수의 수단을 통해서도 일어나고 있습니다. 카카오톡, 텔레그램, 문자 메시지, 트위터 등 해커들의 공격 수단은 매우 다양하며, 개인의 자산과 개인 정보를 탈취하고 있습니다. + +이런 공격을 대비하는 것은 벅차게 느껴질 수 있지만 몇 가지 유의 사항을 참고하신다면 공격의 위험을 크게 낮출 수 있습니다. 메인넷 런칭 준비에 관련해서는 다음 가이드라인이 보안적 리스크를 줄이고 정보를 검증하는데 도움이 될 수 있을 것입니다. + +## 다음은 코스모스 메인넷 런칭 준비 유의사항입니다: + +* 모든 소프트웨어는 공식 채널을 통해서만 다운로드를 하십시오. 또한, 12개 시드키가 입력될 수 있는 모든 작업은 최신 `gaiacli` 버전만을 사용하시기 바랍니다. 텐더민트, 코스모스 SDK 그리고 `gaiacli` 최신 버전은 공식 코스모스 깃허브를 통해서 배포됩니다. 공식 깃허브를 통해서 소프트웨어를 다운로드 함으로써 악의적으로 수정된 소프트웨어를 사용하는 것을 방지할 수 있습니다. +* 12개 시드 단어(시드 키)를 그 누구에게도 알려주지 마십시오. 시드 키는 오직 본인만이 관리해야 합니다. 특히 아톰 보관, 거래 등을 대행해주는 행위를 사칭하여 접근하는 사람들을 유의하십시오. 시드키를 안전하게 관리하기 위해서는 도난으로부터 안전한 오프라인 장소에 보관하시고, 혹시 모를 상황을 대비한 백업 수단을 유지하십시오. *시드키를 절대로 제삼자와 공유하지 마십시오.* +* 블록체인 또는 암호화폐 관련된 이메일과 웹사이트에서 다운로드를 유도하는 첨부 파일을 유의하십시오. 해커는 악의적으로 수정된 웹사이트를 통해서 컴퓨터 내에 있는 파일을 탈취할 수 있습니다. Gmail을 사용하신다면 흔히 사용되는 이메일 기반 피싱 공격을 다음 링크에서 확인하세요. +* 아톰 구매 시 충분한 검증을 진행하세요. 메인넷 런칭 초기에는 아톰 송금이 불가능 하므로, 송금 활성화가 되기 전에는 아톰 매수/매도가 불가능합니다. 또한 송금이 활성화된 후에도 매수/매도를 진행하는 거래소가 안전한지 확인을 하십시오. +* 텐더민트 팀 또는 인터체인 재단은 **절대로** 아톰을 팔지 않습니다. 만약 소셜 미디어 또는 이메일을 통한 토큰 세일 제안이 있다면, 해당 정보는 허위 정보입니다. +* 2단계 인증(2-factor authentication)을 활성화 하시고 주요 계정 복구 수단을 확인하십시오. 이메일, 소셜 미디어 계정, 깃허브 계정, 코스모스 포럼 계정 등은 공격자가 본인의 온라인 계정을 탈취할 수 있는 플랫폼을 제공합니다. 현재 2단계 인증을 사용하고 계시지 않는다면 활성화하시고 추가로 토큰 관리에 하드웨어 기반 키를 사용하시는 방법을 추천해 드립니다. 위 방법은 간단하지만 효율적으로 계정 탈취 가능성을 줄여줍니다. +* 포럼 또는 단톡방을 통해서 모르는 사람이 기술적 조언을 제공하는 것에 주의를 기울이십시오. 리스크가 높은 행동(토큰 전송, 키 입력 등)들의 명령어에 익숙해지시고 공식 문서를 참고하셔서 본인의 자산을 위험에 취할 수 있는 행동을 숙지하십시오. 코스모스 포럼, 라이엇 채팅 그리고 텔레그램 방은 공식 뉴스 제공 채널이 아니라는 점을 인지하십시오. +* 모든 송금 트랜잭션을 발생하기 전에 관련 정보를 확인하세요. 코스모스 주소는 길 수 있지만 4개 단어로 묶어서 확인하는 습관이 실수로 토큰을 소각하는 것을 방지할 수 있습니다. + +만약 누군가 과도하게 좋은 조건으로 코스모스 관련 서비스를 제공한다면 우선 의심을 하시는 것을 추천합니다. 주요 정보는 그 어떤 상황에서도 외부인과 공유하면 안 됩니다. 또한 모든 정보를 공식 채널들을 통해 확인하십시오. + +코스모스 팀, 텐더민트 팀 그리고 인터체인 팀은 개인 정보를 요청하거나 12개 시드키를 요구하는 이메일을 보내지 않습니다. 코스모스 팀은 언제나 공식 블로그, 트위터 그리고 깃허브를 통해서만 소통을 진행합니다. + +#### Thank you to Cosmos Korea! +* 텔레그램: https://t.me/cosmoskr +* 페이스북 : https://facebook.com/groups/cosmoskorea + +참고: 이 글은 정보 제공을 위하여 번역된 글입니다. 내용/해석에 차이가 있을 수 있으며, 이 경우 영문 원문이 상위 권한을 가집니다. From abafd8bf9dbb7f92a428c7829e8635950c545a20 Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Wed, 13 Feb 2019 15:26:43 +0100 Subject: [PATCH 03/20] Add Bcrypt benchmarks --- PENDING.md | 2 ++ crypto/keys/mintkey/README.md | 24 +++++++++++++++++++++ crypto/keys/mintkey/mintkey_bench_test.go | 26 +++++++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 crypto/keys/mintkey/README.md create mode 100644 crypto/keys/mintkey/mintkey_bench_test.go diff --git a/PENDING.md b/PENDING.md index a41bbe0ca3..3a1e1a1ae5 100644 --- a/PENDING.md +++ b/PENDING.md @@ -35,6 +35,8 @@ IMPROVEMENTS * SDK + * \# Add Bcrypt benchmarks & justification of security parameter choice + * Tendermint * [\#3618] Upgrade to Tendermint 0.30.03 diff --git a/crypto/keys/mintkey/README.md b/crypto/keys/mintkey/README.md new file mode 100644 index 0000000000..38da0fbe7f --- /dev/null +++ b/crypto/keys/mintkey/README.md @@ -0,0 +1,24 @@ +To run Bcrypt benchmarks: + +```bash +go test -bench . +``` + +On the test machine (midrange ThinkPad; i7 6600U), this results in: + +```bash +goos: linux +goarch: amd64 +pkg: github.com/cosmos/cosmos-sdk/crypto/keys/mintkey +BenchmarkBcryptGenerateFromPassword/benchmark-security-param-9-4 50 34609268 ns/op +BenchmarkBcryptGenerateFromPassword/benchmark-security-param-10-4 20 67874471 ns/op +BenchmarkBcryptGenerateFromPassword/benchmark-security-param-11-4 10 135515404 ns/op +BenchmarkBcryptGenerateFromPassword/benchmark-security-param-12-4 5 274824600 ns/op +BenchmarkBcryptGenerateFromPassword/benchmark-security-param-13-4 2 547012903 ns/op +BenchmarkBcryptGenerateFromPassword/benchmark-security-param-14-4 1 1083685904 ns/op +BenchmarkBcryptGenerateFromPassword/benchmark-security-param-15-4 1 2183674041 ns/op +PASS +ok github.com/cosmos/cosmos-sdk/crypto/keys/mintkey 12.093s +``` + +Benchmark results are in nanoseconds, so security parameter 12 takes about a quarter of a second to generate the Bcrypt key, security param 13 takes half a second, and so on. diff --git a/crypto/keys/mintkey/mintkey_bench_test.go b/crypto/keys/mintkey/mintkey_bench_test.go new file mode 100644 index 0000000000..fbc3e58dd8 --- /dev/null +++ b/crypto/keys/mintkey/mintkey_bench_test.go @@ -0,0 +1,26 @@ +package mintkey + +import ( + "fmt" + "testing" + + "github.com/stretchr/testify/require" + "golang.org/x/crypto/bcrypt" + + "github.com/tendermint/tendermint/crypto" +) + +func BenchmarkBcryptGenerateFromPassword(b *testing.B) { + passphrase := []byte("passphrase") + for securityParam := 9; securityParam < 16; securityParam++ { + param := securityParam + b.Run(fmt.Sprintf("benchmark-security-param-%d", param), func(b *testing.B) { + saltBytes := crypto.CRandBytes(16) + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := bcrypt.GenerateFromPassword(saltBytes, passphrase, param) + require.Nil(b, err) + } + }) + } +} From 4f5ad4f1edb9bfd1fbf7f064efd5e1da20273beb Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Wed, 13 Feb 2019 15:28:09 +0100 Subject: [PATCH 04/20] Add PR number to PENDING.md --- PENDING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PENDING.md b/PENDING.md index 3a1e1a1ae5..30f1048c52 100644 --- a/PENDING.md +++ b/PENDING.md @@ -35,7 +35,7 @@ IMPROVEMENTS * SDK - * \# Add Bcrypt benchmarks & justification of security parameter choice + * \#3638 Add Bcrypt benchmarks & justification of security parameter choice * Tendermint * [\#3618] Upgrade to Tendermint 0.30.03 From d21ab4efc546bb081324ea942a8c2e5336ac291e Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Wed, 13 Feb 2019 15:36:03 +0100 Subject: [PATCH 05/20] Add justification on security parameter choice --- crypto/keys/mintkey/README.md | 12 ++++++++++++ crypto/keys/mintkey/mintkey.go | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/crypto/keys/mintkey/README.md b/crypto/keys/mintkey/README.md index 38da0fbe7f..ca3d4c21cf 100644 --- a/crypto/keys/mintkey/README.md +++ b/crypto/keys/mintkey/README.md @@ -1,3 +1,15 @@ +Security parameter choice +------------------------- + +The present Bcrypt security parameter used is 12, which should take about a quarter of a second on midrange consumer hardware (see [Benchmarking](#benchmarking) section below). + +For some background into security parameter considerations, see [here](https://auth0.com/blog/hashing-in-action-understanding-bcrypt/) and [here](https://security.stackexchange.com/questions/3959/recommended-of-iterations-when-using-pkbdf2-sha256/3993#3993). + +Given our security model, where an attacker would need to already have access to a victim's computer and copy the `~/.gaiacli` directory (as opposed to e.g. web authentication), this parameter choice seems sufficient for the time being. + +Benchmarking +------------ + To run Bcrypt benchmarks: ```bash diff --git a/crypto/keys/mintkey/mintkey.go b/crypto/keys/mintkey/mintkey.go index 3b06415e2e..11743013a5 100644 --- a/crypto/keys/mintkey/mintkey.go +++ b/crypto/keys/mintkey/mintkey.go @@ -34,7 +34,7 @@ const ( // variables in runtime), one can cause the user to sign a different tx // than what they see, which is a significantly cheaper attack then breaking // a bcrypt hash. (Recall that the nonce still exists to break rainbow tables) -// TODO: Consider increasing default +// For further notes on security parameter choice, see README.md var BcryptSecurityParameter = 12 //----------------------------------------------------------------- From c71893ed2d91d57fca773887c93951e05ff7c69f Mon Sep 17 00:00:00 2001 From: dogemos <42988601+dogemos@users.noreply.github.com> Date: Wed, 13 Feb 2019 23:38:48 +0900 Subject: [PATCH 06/20] Merge PR #3615: Add 'translations/kr' --- docs/translations/kr/README.md | 39 + docs/translations/kr/clients/README.md | 18 + docs/translations/kr/clients/cli.md | 3 + docs/translations/kr/clients/lite/README.md | 63 ++ .../kr/clients/lite/getting_started.md | 33 + .../translations/kr/clients/lite/pics/C2H.png | Bin 0 -> 17324 bytes .../translations/kr/clients/lite/pics/H2C.png | Bin 0 -> 20012 bytes docs/translations/kr/clients/lite/pics/MA.png | Bin 0 -> 31774 bytes .../kr/clients/lite/pics/absence1.png | Bin 0 -> 97697 bytes .../kr/clients/lite/pics/absence2.png | Bin 0 -> 31717 bytes .../kr/clients/lite/pics/absence3.png | Bin 0 -> 28517 bytes .../kr/clients/lite/pics/architecture.png | Bin 0 -> 30539 bytes .../kr/clients/lite/pics/changeProcess.png | Bin 0 -> 8919 bytes .../kr/clients/lite/pics/commitValidation.png | Bin 0 -> 64713 bytes .../kr/clients/lite/pics/create-account.png | Bin 0 -> 21826 bytes .../kr/clients/lite/pics/deposit.png | Bin 0 -> 20738 bytes .../kr/clients/lite/pics/existProof.png | Bin 0 -> 96053 bytes .../kr/clients/lite/pics/high-level.png | Bin 0 -> 11595 bytes .../lite/pics/light-client-architecture.png | Bin 0 -> 24816 bytes .../clients/lite/pics/loadbalanceDiagram.png | Bin 0 -> 34910 bytes .../kr/clients/lite/pics/simpleMerkleTree.png | Bin 0 -> 24768 bytes .../kr/clients/lite/pics/substoreProof.png | Bin 0 -> 62165 bytes .../kr/clients/lite/pics/transfer-tokens.png | Bin 0 -> 26410 bytes .../kr/clients/lite/pics/transfer.png | Bin 0 -> 18492 bytes .../kr/clients/lite/pics/trustPropagate.png | Bin 0 -> 49750 bytes .../lite/pics/updateValidatorToHeight.png | Bin 0 -> 18077 bytes .../clients/lite/pics/validatorSetChange.png | Bin 0 -> 36169 bytes .../kr/clients/lite/pics/withdraw.png | Bin 0 -> 20935 bytes .../kr/clients/lite/specification.md | 185 +++++ .../kr/clients/service-providers.md | 115 +++ docs/translations/kr/concepts/baseapp.md | 85 ++ docs/translations/kr/concepts/store/README.md | 0 docs/translations/kr/cosmos-docs.jpg | Bin 0 -> 289549 bytes docs/translations/kr/cosmos-sdk-image.png | Bin 0 -> 190395 bytes docs/translations/kr/gaia/README.md | 19 + .../kr/gaia/delegator-guide-cli.md | 426 ++++++++++ docs/translations/kr/gaia/deploy-testnet.md | 249 ++++++ docs/translations/kr/gaia/gaiacli.md | 758 ++++++++++++++++++ docs/translations/kr/gaia/genesis.md | 47 ++ docs/translations/kr/gaia/installation.md | 44 + docs/translations/kr/gaia/join-testnet.md | 157 ++++ docs/translations/kr/gaia/keys.md | 9 + docs/translations/kr/gaia/ledger.md | 30 + .../kr/gaia/validators/overview.md | 34 + .../kr/gaia/validators/security.md | 54 ++ .../kr/gaia/validators/validator-faq.md | 308 +++++++ .../kr/gaia/validators/validator-setup.md | 264 ++++++ docs/translations/kr/gaia/what-is-gaia.md | 22 + docs/translations/kr/intro/README.md | 15 + docs/translations/kr/intro/ocap.md | 68 ++ .../kr/intro/sdk-app-architecture.md | 59 ++ .../kr/kr-translation-progress.md | 39 + docs/translations/kr/modules/README.md | 46 ++ 53 files changed, 3189 insertions(+) create mode 100755 docs/translations/kr/README.md create mode 100755 docs/translations/kr/clients/README.md create mode 100755 docs/translations/kr/clients/cli.md create mode 100755 docs/translations/kr/clients/lite/README.md create mode 100755 docs/translations/kr/clients/lite/getting_started.md create mode 100755 docs/translations/kr/clients/lite/pics/C2H.png create mode 100755 docs/translations/kr/clients/lite/pics/H2C.png create mode 100755 docs/translations/kr/clients/lite/pics/MA.png create mode 100755 docs/translations/kr/clients/lite/pics/absence1.png create mode 100755 docs/translations/kr/clients/lite/pics/absence2.png create mode 100755 docs/translations/kr/clients/lite/pics/absence3.png create mode 100755 docs/translations/kr/clients/lite/pics/architecture.png create mode 100755 docs/translations/kr/clients/lite/pics/changeProcess.png create mode 100755 docs/translations/kr/clients/lite/pics/commitValidation.png create mode 100755 docs/translations/kr/clients/lite/pics/create-account.png create mode 100755 docs/translations/kr/clients/lite/pics/deposit.png create mode 100755 docs/translations/kr/clients/lite/pics/existProof.png create mode 100755 docs/translations/kr/clients/lite/pics/high-level.png create mode 100755 docs/translations/kr/clients/lite/pics/light-client-architecture.png create mode 100755 docs/translations/kr/clients/lite/pics/loadbalanceDiagram.png create mode 100755 docs/translations/kr/clients/lite/pics/simpleMerkleTree.png create mode 100755 docs/translations/kr/clients/lite/pics/substoreProof.png create mode 100755 docs/translations/kr/clients/lite/pics/transfer-tokens.png create mode 100755 docs/translations/kr/clients/lite/pics/transfer.png create mode 100755 docs/translations/kr/clients/lite/pics/trustPropagate.png create mode 100755 docs/translations/kr/clients/lite/pics/updateValidatorToHeight.png create mode 100755 docs/translations/kr/clients/lite/pics/validatorSetChange.png create mode 100755 docs/translations/kr/clients/lite/pics/withdraw.png create mode 100755 docs/translations/kr/clients/lite/specification.md create mode 100755 docs/translations/kr/clients/service-providers.md create mode 100644 docs/translations/kr/concepts/baseapp.md create mode 100644 docs/translations/kr/concepts/store/README.md create mode 100755 docs/translations/kr/cosmos-docs.jpg create mode 100755 docs/translations/kr/cosmos-sdk-image.png create mode 100755 docs/translations/kr/gaia/README.md create mode 100644 docs/translations/kr/gaia/delegator-guide-cli.md create mode 100755 docs/translations/kr/gaia/deploy-testnet.md create mode 100755 docs/translations/kr/gaia/gaiacli.md create mode 100644 docs/translations/kr/gaia/genesis.md create mode 100755 docs/translations/kr/gaia/installation.md create mode 100755 docs/translations/kr/gaia/join-testnet.md create mode 100755 docs/translations/kr/gaia/keys.md create mode 100755 docs/translations/kr/gaia/ledger.md create mode 100755 docs/translations/kr/gaia/validators/overview.md create mode 100755 docs/translations/kr/gaia/validators/security.md create mode 100755 docs/translations/kr/gaia/validators/validator-faq.md create mode 100755 docs/translations/kr/gaia/validators/validator-setup.md create mode 100644 docs/translations/kr/gaia/what-is-gaia.md create mode 100755 docs/translations/kr/intro/README.md create mode 100755 docs/translations/kr/intro/ocap.md create mode 100755 docs/translations/kr/intro/sdk-app-architecture.md create mode 100644 docs/translations/kr/kr-translation-progress.md create mode 100755 docs/translations/kr/modules/README.md diff --git a/docs/translations/kr/README.md b/docs/translations/kr/README.md new file mode 100755 index 0000000000..f5198d4469 --- /dev/null +++ b/docs/translations/kr/README.md @@ -0,0 +1,39 @@ +# 코스모스 SDK 문서에 오신 걸 환영합니다! + +::: warning +번역된 문서는 **참고용**으로 번역되었습니다. 다수의 오타, 오류가 존재할 수 있으며, 영문 업데이트보다 번역이 느리게 진행될 수 있다는 점을 인지하시기 바랍니다. + +코스모스 관련 가장 정확한 정보를 확인하시기 위해서는 영어 원문을 참고하시기 바랍니다. +::: + +## 코스모스 SDK 배우기 + +### SDK 소개 + +만약 코스모스 SDK가 처음이지만 배우고 싶으시다면 여기에서 시작하시는 것을 추천드립니다. + +### SDK 튜토리얼 + +직접 해보면서 학습하는 방식을 선호하신다면 SDK 애플리케이션 튜토리얼을 따라하실 수 있습니다. 튜토리얼은 **[SDK 기반 블록체인을](https://github.com/cosmos/sdk-application-tutorial)** 만드는 방법을 처음부터 끝까지 가르쳐 드립니다. 이 과정에서 코스모스 SDK의 기본적인 개념 또한 함께 배우실 수 있습니다. + +## 코스모스 SDK 사용하기 + +다음 항목은 실제로 작동하는 SDK 기반 블록체인에 필요한 모든 정보를 포함하고 있습니다. + +>*NOTE*: 코스모스 SDK 지원 문서의 완성도와 정확성을 높이기 위해 해당 문서는 꾸준히 업데이트 되고 있습니다. 혹시 오류나 제안사항이 있으시다면 [코스모스 포럼](https://forum.cosmos.network) 또는 [깃허브 이슈를](https://github.com/cosmos/cosmos-sdk/issues/new) 통해서 알려주시면 감사하겠습니다. + +- [인트로](./intro/README.md): 코스모스 SDK에 대한 high-level 소개 자료 +- [Gaia](./gaia/README.md): Gaia 애플리케이션(현재 코스모스 허브 명칭)에 대한 모든 문서들이 있습니다. Gaia 테스트넷에 참여하는 방법에 대한 정보 +- [클라이언트](./clients/README.md): SDK Command-Line Interface 와 SDK 라이트 클라이언트 같은 SDK 클라이언트에 관련한 문서 +- [스펙](./spec/README.md): SDK와 모듈들에 대한 스펙 정의 + +## 코스모스 허브 테스트넷 + +`gaia` 애플리케이션(코스모스 허브의 애플리케이션)을 설치하고 퍼블릭 테스트넷에 참가하고 싶으시다면 여기를 클릭해주세요. +자체적인 `gaia` 테스트넷을 운영하고 싶으시다면 **[여기](./gaia/join-testnet.md)** 를 클릭해주세요. + +자체적인 `gaia` 테스트넷 운영을 원하시는 경우 **[여기](./gaia/deploy-testnet.md)** 를 확인하세요 + +## 기여하기 + +코스모스 도큐멘테이션 또는 코드 업데이트 규칙에 관련해서는 [이 파일](https://github.com/cosmos/cosmos-sdk/blob/master/docs/DOCS_README.md)을 참고해주세요. \ No newline at end of file diff --git a/docs/translations/kr/clients/README.md b/docs/translations/kr/clients/README.md new file mode 100755 index 0000000000..5956e7464b --- /dev/null +++ b/docs/translations/kr/clients/README.md @@ -0,0 +1,18 @@ +# 클라이언트 + +이 항목은 SDK 기반 블록체인을 위한 클라이언트에 대한 정보가 포함되어있습니다. + +>*참고*: 이 항목은 작업이 진행중입니다. + +## 라이트 클라이언트(Light-client) + +라이트 클라이언트는 유저가 특정 블록체인 상태 전체를 다운로드 받지 않고도 안전성이 확보될 수 있는 환경에서 블록체인 애플리케이션과 소통할 수 있게 합니다. + +- [라이트 클라이언트 개요](./lite/README.md) +- [라이트 클라이언트 서버 구동하기](./lite/getting_started.md) +- [라이트 클라이언트 스펙](./lite/specification.md) + +## 다른 클라이언트 + +- [SDK 기반 블록체인을 위한 커맨드 라인 기반 인터페이스](./cli.md) +- [서비스 제공자 문서](./service-providers.md) diff --git a/docs/translations/kr/clients/cli.md b/docs/translations/kr/clients/cli.md new file mode 100755 index 0000000000..fda1ef60b9 --- /dev/null +++ b/docs/translations/kr/clients/cli.md @@ -0,0 +1,3 @@ +# CLI + +> TODO: Rewrite this section to explain how CLI works for a generic SDK app. diff --git a/docs/translations/kr/clients/lite/README.md b/docs/translations/kr/clients/lite/README.md new file mode 100755 index 0000000000..4479bd0d42 --- /dev/null +++ b/docs/translations/kr/clients/lite/README.md @@ -0,0 +1,63 @@ +# 라이트 클라이언트 개요 + +**코스모스 SDK 라이트 클라이언트 RPC 문서를 [여기]에서 확인하세요(https://cosmos.network/rpc/)** + +## 소개 + +라이트 클라이언트는 핸드폰 같은 클라이언트에서 블록체인 상태(state)에 대한 증거(proof)를 풀노드로부터 전달받을 수 있게 합니다. 라이트 클라이언트는 전송받은 증거에 대한 검증을 자체적으로 수행할 수 있기 때문에 풀노드를 신뢰하지 않아도 되며, 풀노드의 거짓 정보 전달을 확인할 수 있다. + +라이트 클라이언트는 대역폭(bandwidth), 컴퓨터 연산력 그리고 저장공간 측면에서 큰 리소스를 소모하지 않고도 풀노드와 동일한 보안을 제공할 수 있다. 또한 유저의 설정에 따라 모듈화 된 기능성을 제공할 수 있다. 이런 우수한 기능은 개발자들이 풀 블록체인 노드가 없이도 안전하고, 효율적이고, 사용성이 높은 모바일 애플리케이션, 웹사이트 등을 만들 수 있게 한다. + +### 라이트 클라이언트란 무엇인가 + +코스모스 SDK 라이트 클라이언트 (Gaia-lite)는 두 가지 요소로 나뉘어 있다. 첫 번째 요소는 모든 텐더민트 기반 애플리케이션들의 기본적인 컴포넌트다. 해당 컴포넌트는 헤더 체인을 따르면서 풀노드가 제공하는 증거를 신뢰할 수 있는 검증인을 통해 확인하는 방식으로 보안과 연결성 측면을 담당한다. 두 번째 요소는 코스모스 허브(`gaiad`)에 고유한 컴포넌트다. 일종의 쿼리 엔드포인트(query endpoint)로써 애플리케이션 특정 기능을 드러내는 역할을 수행한다. 애플리케이션 상태에 대한 모든 쿼리는 쿼리 엔드포인트(query endpoint)를 통해 이루어진다. 쿼리 엔드포인트를 이용하는 것에 가장 큰 장점은 애플리케이션이 리턴하는 증거를 검증할 수 있다는 것이다. + +### 하이레벨 아키텍처(High-level Architecture) + +코스모스 허브(또는 다른 존)를 위한 제삼자 클라이언트 애플리케이션을 만드려고 하는 개발자는 기본 규례적(canonical) API를 기반으로 개발을 해야 합니다. API는 여러 가지 부품으로 이루어져 있습니다. 코스모스 생태계의 모든 존은 기본적으로 ICS0(텐더민트API)를 공개해야 하나, 그 외에 모듈들은 선택 사항입니다. 모든 존은 모듈 API를 도입할 여부를 기능에 따라 선택할 권리가 있습니다. + +기본적으로 코스모스 허브는 [ICS0](https://cosmos.network/rpc/#/ICS0) (텐더민트API), [ICS1](https://cosmos.network/rpc/#/ICS1) (키API), [ICS20](https://cosmos.network/rpc/#/ICS20) (토큰API), [ICS21](https://cosmos.network/rpc/#/ICS21) (스테이킹API), +[ICS22](https://cosmos.network/rpc/#/ICS22) (거버넌스API) and [ICS23](https://cosmos.network/rpc/#/ICS23) (슬래싱API)를 도입하고 있습니다. + +![high-level](./pics/high-level.png) + +모든 애플리케이션은 Gaia-lite 클라이언트를 기반으로 운영되는 것을 원칙으로 삼습니다. Gaia-lite 외의 소프트웨어는 특정 존 API에 대한 안정성을 보장하지 않습니다. + +### 비교 + +ABCI 풀노드는 다음과 같은 항목에서 라이트 클라이언트와 다릅니다: + +|| 풀노드 | 라이트 클라이언트 | 설명| +|-| ------------- | ----- | -------------- | +| 트랜잭션 검증 및 실행|Yes|No|풀노드는 모든 트랜잭션을 검증하고 실행하지만, 라이트 클라이언트는 모든 트랜잭션을 처리하지 않습니다| +| 검증 및 블록 저장|Yes|No|풀노드는 모든 블록을 검증하고 보관하지만, 라이트 클라이언트는 블록 저장을 하지 않습니다| +| 합의 절차 참여| Yes|No|검증인 세트에 포함된 풀노드는 합의 절차에 참여하지만, 라이트 클라이언트는 절대로 합의 절차에 참여할 수 없습니다| +| 대역폭 사용량|대량|소량|풀노드는 모든 블록을 전달받기 때문에 충분한 대역폭이 확보되지 않는 경우 다른 뒤질 확률이 있습니다. 검증인 풀노드가 낮은 대역폭으로 지연되는 경우 합의 절차 전체가 늦어질 수 있습니다. 라이트 클라이언트는 로컬 호출만을 처리하기 때문에 소량의 대역폭을 사용합니다| +| 연산력 사용량|대량|소량|풀노드는 모든 트랜잭션을 처리하며 모든 블록을 검증해야 하기 때문에 대량의 컴퓨터 연산력을 사용합니다.| +| 저장 공간 사용량|대량|소량|풀노드는 모든 블록과 ABCI 상태를 저장합니다. 라이트 클라이언트는 검증인 세트와 일부 체크포인트만을 저장합니다.| +| 전력 사용량|대량|소량|풀노드는 24시간 돌아가는 고성능 머신 환경이 제공되어야 하기 때문에 대량의 전력을 소모합니다. 라이트 클라이언트의 경우 유저 애플리케이션과 동일한 환경에서 운용될 수 있습니다. 라이트 클라이언트는 모바일 기기 같은 저성능 기기에서도 사용될 수 있습니다. 또한 라이트 클라이언트는 필요에 따라 클라이언트 작동을 출 수 있기 때문에 모바일 기기 같은 저전력 소모를 필요로 하는 환경에서 이용될 수 있습니다.| +| API 제공|모든 코스모스 API|모듈 API|풀노드는 모든 코스모스 API를 지원합니다. 라이트 클라이언트는 유저 설정에 따라 모듈 API를 제공합니다.| +| 보안|높음|높음|풀노드는 자체적으로 모든 트랜잭션과 블록을 검증합니다. 라이트 클라이언트는 모든 트랜잭션을 검증하지 않지만 다른 풀노드를 통해 데이터를 전달받아 자체적인 검증을 할 수 있습니다. 풀노드와 라이트 클라이언트는 둘 다 제삼자 노드를 신뢰할 필요 없이 데이터 검증이 가능하기 때문에 높은 수준의 보안을 제공합니다| + +위 표와 같이 가이아 라이트 클라이언트는 소량의 대역폭, 연산력, 저장 공간, 전력을 가지고도 유저가 필요로 하는 모든 기능과 보안을 제공합니다. + +## 보안 유지하기 + +### 신뢰 가능한 검증인 세트 + +가이아 라이트 클라이언트의 디자인 철학은 다음과 같은 원칙을 따릅니다: + +1. **검증인 노드와 다른 풀 노드를 포함한 모든 블록체인 노드를 신뢰하지 않는다** +2. **오직 전체적인 검증인 세트(validator set) 만을 신뢰한다** + +초기에 신뢰될 수 있는 검증인 세트(통상 제네시스 파일에 있는 검증인 세트)는 신뢰 저장소(trust store)에 미리 세팅되어야 합니다. 이후, 런타임에서 라이트 클라이언트가 다른 검증인 세트를 발견하게 된다면 클라이언트는 해당 검증인 세트를 별도로 검증한 후 새로운 검증인 세트를 저장소에 보관하게 됩니다. + +![validator-set-change](./pics/validatorSetChange.png) + +### 신뢰 전파(trust propagation) + +위에 항목에 나열된 바와 같이, 라이트 클라이언트(lcd)는 신뢰할 수 있는 검증인 세트를 별도로 검증합니다. 검증인 세트는 일종의 신뢰의 기반이 되며, 이런 신뢰를 기반으로 블록 정보와 트랜잭션 정보 같은 다른 블록체인 데이터에 신뢰를 전파(propogate)하는데 이용됩니다. 신뢰 전파 아키텍처는 다음과 같습니다. + +![change-process](./pics/trustPropagate.png) + +라이트 클라이언트는 통상 신뢰 가능한 검증인 세트를 통해 모든 프리 커밋 정보와 블록 헤더 정보가 포함된 각 블록의 커밋을 검증할 수 있습니다. 이후 블록 해시 값, 데이터 해시 값 그리고 앱해시(appHash)에 대한 신뢰를 파생합니다. 머클 증거(merkle proof)와 위의 정보를 이용해 모든 트랜잭션 데이터와 ABCI의 상태(state)를 검증할 수 있게 됩니다. diff --git a/docs/translations/kr/clients/lite/getting_started.md b/docs/translations/kr/clients/lite/getting_started.md new file mode 100755 index 0000000000..bc5ba1bf3b --- /dev/null +++ b/docs/translations/kr/clients/lite/getting_started.md @@ -0,0 +1,33 @@ +# REST 서버 시작하기 + +REST 서버를 가동하기 위해서는 다음과 같은 파라미터 값을 정의해야 합니다: + + +| 파라미터 | 형태 | 기본 값 | 필수/선택 | 설명 | +| ----------- | --------- | ----------------------- | -------- | ---------------------------------------------------- | +| chain-id | string | null | 필수 | 연결할 체인의 chain-id | +| node | URL | "tcp://localhost:46657" | 필수 | 연결할 풀노드의 주소 | +| laddr | URL | "tcp://localhost:1317" | 필수 | REST 서버를 가동할 주소 | +| trust-node | bool | "false" | 필수 | 연결할 풀노드의 신뢰가능 여부 | +| trust-store | DIRECTORY | "$HOME/.lcd" | 선택 | 체크포인트와 검증인 세트를 저장할 디렉터리 | + +예를 들어:: + +```bash +gaiacli rest-server --chain-id=test \ + --laddr=tcp://localhost:1317 \ + --node tcp://localhost:26657 \ + --trust-node=false +``` + +서버는 기본적으로 HTTP를 확인합니다. 보안 계층을 사용하시려면 `--tls` 플래그를 추가해주세요. 기본적으로 자체 서명이 된 인증서가 생성되며, fingerprint가 프린트됩니다. 서버에 특정 SSL 인증서를 사용하기 ㅜ이해서는 `--ssl-certfile`과 `--ssl-keyfile` 플래그를 지정해주세요: + +```bash +gaiacli rest-server --chain-id=test \ + --laddr=tcp://localhost:1317 \ + --node tcp://localhost:26657 \ + --trust-node=false \ + --ssl-certfile=mycert.pem --ssl-keyfile=mykey.key +``` + +Gaia-Lite RPC에 대한 추가적인 정보를 원하시면 [Swagger 문서](https://cosmos.network/rpc/)를 확인하세요. diff --git a/docs/translations/kr/clients/lite/pics/C2H.png b/docs/translations/kr/clients/lite/pics/C2H.png new file mode 100755 index 0000000000000000000000000000000000000000..49f7e07f320ebf40829556d168f45cc0f43daf6d GIT binary patch literal 17324 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 a{n&+RG4;Gs8|xYPCnYW~Rv}{W@qYoAmxHtb literal 0 HcmV?d00001 diff --git a/docs/translations/kr/clients/lite/pics/H2C.png b/docs/translations/kr/clients/lite/pics/H2C.png new file mode 100755 index 0000000000000000000000000000000000000000..027eafcde1f4f0779e6614acbd42e72a2628a78f GIT binary patch literal 20012 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 X`?u`l20X!A;9z7V6vfL#jXwN;zxS{Y literal 0 HcmV?d00001 diff --git a/docs/translations/kr/clients/lite/pics/MA.png b/docs/translations/kr/clients/lite/pics/MA.png new file mode 100755 index 0000000000000000000000000000000000000000..ae38239628554d6c2e8fac48b5eed77bceeaf5ec GIT binary patch literal 31774 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 literal 0 HcmV?d00001 diff --git a/docs/translations/kr/clients/lite/pics/absence1.png b/docs/translations/kr/clients/lite/pics/absence1.png new file mode 100755 index 0000000000000000000000000000000000000000..70b4c9e8d22753b506682086f11e442a7441cbb5 GIT binary patch literal 97697 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

3lE(0~5)&o^Fq;k9fm>rMfA^yRsE{JL7~ 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

aD}wU94-=NdKwuYnfXBd=y@ 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

MFm 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 literal 0 HcmV?d00001 diff --git a/docs/translations/kr/clients/lite/pics/absence2.png b/docs/translations/kr/clients/lite/pics/absence2.png new file mode 100755 index 0000000000000000000000000000000000000000..6ce5bcde31dece5528a36f18fcbea1c98461ca0a GIT binary patch literal 31717 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 Wa-vp4fIrE_QdW2>U-Zb>@BaWy%|5CC literal 0 HcmV?d00001 diff --git a/docs/translations/kr/clients/lite/pics/changeProcess.png b/docs/translations/kr/clients/lite/pics/changeProcess.png new file mode 100755 index 0000000000000000000000000000000000000000..1771c239b92f73d761ac77c06a5a11a435321f71 GIT binary patch literal 8919 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 literal 0 HcmV?d00001 diff --git a/docs/translations/kr/clients/lite/pics/commitValidation.png b/docs/translations/kr/clients/lite/pics/commitValidation.png new file mode 100755 index 0000000000000000000000000000000000000000..89985bcc12eab6f731d8d2332aa0b8822069d5f7 GIT binary patch literal 64713 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

  • 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 Z@m8}L+OwX38hOqB^8hcDG6x=q+2-TTL<{v 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 E1eUxUYybcN literal 0 HcmV?d00001 diff --git a/docs/translations/kr/clients/lite/pics/deposit.png b/docs/translations/kr/clients/lite/pics/deposit.png new file mode 100755 index 0000000000000000000000000000000000000000..1fb3acdc5aa28416ea79ee8b6e155f6a7c497c41 GIT binary patch literal 20738 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 literal 0 HcmV?d00001 diff --git a/docs/translations/kr/clients/lite/pics/existProof.png b/docs/translations/kr/clients/lite/pics/existProof.png new file mode 100755 index 0000000000000000000000000000000000000000..ee5de0851bf1d1a0ea503fb03b8c745547c58b87 GIT binary patch literal 96053 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 literal 0 HcmV?d00001 diff --git a/docs/translations/kr/clients/lite/pics/high-level.png b/docs/translations/kr/clients/lite/pics/high-level.png new file mode 100755 index 0000000000000000000000000000000000000000..73a14e0d73db9a276150b0c2affaf332b7ab0331 GIT binary patch literal 11595 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 R1w=ltjM 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%0DO|0SYW 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 literal 0 HcmV?d00001 diff --git a/docs/translations/kr/clients/lite/pics/substoreProof.png b/docs/translations/kr/clients/lite/pics/substoreProof.png new file mode 100755 index 0000000000000000000000000000000000000000..90dadaef37afe2c1992342fc0bfb548e14743b28 GIT binary patch literal 62165 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

    v$AEl$= zgna2;>hNh?jL8@1y*kDeR8xlnwRH7*>zNSTO0$mFQ`@_Aor^cxo(mVIn%A-=IwW`F zyWOeYQ|+;R=OuU#Bm6&szBLS92x`WnZ-U(xK*|{*LXSyct{?|h)$x6&G1zgQM?2al zdR}2E;jhMT}Kcs5a%0e?j_Lxy$zCp%0}i^0S0F9OwK z{g_7EmC065H2eew)<3U(;5TW#Bkj2Hc>b9&8$W|{rm*#i=A#dH(lzgTh|>@}G6Q}d zn;3Laoj%`}++^lJ_v_`TUd9L3+(gIQr2c&fO|yiE;rbP{9vKBdJNkYI3^vAnjFcs7 zm&~QhCyO0^81e)ZOwOtb8MBbvxr~ncv&?RPRw3Sgdb+A&x%t0-l$^6o<@7^7bE9Zv z%o>|!@?Q5dflV5X^SPgEDn7nDXz{CXpbABqb}!UiLIsf=?lmHri29RDYhN0@sDih* zDafoi(`nUXrnmmF)b0s_d-mG}%%i&0{93w(JuTDVZpn5DXtM$UPc)8@So<23Sc?LcJx< zzj2l{QowI4&^szQzt<|4F$cX#kEf1)COdA{s6zES^R$Vs&dv}-7be>LIFptU& zd9I*3n%w9xI?A+=h{B2a6Xi>%+koJmRm!zz=5+T$ZH4q>c(;fr*1-v?Y~Ge!Kp~ic zHN}e{^unj}$;RLohH{oZ_0dO=#sYNuc*frW(`52=f(Gp{-b_Hg7WT#DIq`(*sP?N- zo1YmTk#BuyM}omljhEkWvWxPA{iwm!r;5x}QM@85OnPncz-0oWDE280d6VMhWKMnW zgsmS=`z#2ZriCX)=iMK>TuwV-88tgBi*59|P7_P?j22Sool#x-`5vEGZ>VWx;Gz z4jNXNg`SpVBe}KZ?#0xEBtFpAKBO$}3X*$VQB4M+sU(y3;Fp-a?O^a1E2y16``KdZ zC(}F7o%q2TLZUP+LZb~My3wE>o0AZ82n??VG}k~YWzL1!ctP!dG^Bu*zalmbyMy1-+{Npy_ zgiF^d?DX*r1KDl1Bz$o`iwJ zu_>1R$y*Kc0sQI6AhL9~rUaz4Wg$euR2UA%{QNOV)FNs;jFUwN9Y z;gx^sg_m$3*%B;3OqZ`G*lkWbzq4Tmt>A9^t>So#)DcKn-2~7~BG8-hYfOa18((G% z2OTf2naI+&l$7f{5w6Tw1CJReHg`&?C+lFHYJr*NkpGu{@lXUKr^Ti>15u!xsa(DT`iX*XIp)ks5l;(d~{x zoqG&hMJ=tI5zv9ACO8JoLXMrO`{=&+4RaQ$MkPevp8qO6CK^S877mhi!_(ab%s7Rq zjTm-YLsZmnEu3@zAA-gfeSC`j6aBcidO6p|bcr>+unpRLq9CA7mQ71_n6;vpj|rDK zbxgAa`0VVcgMk=<&xsVWKbSrkK=IBVuQ&s&fX+kSmbb&Pkq z(2_r67E{??%xSypBSUXd?&VFMsFX(F%j%a%o{^3^P6uaY=i6;^r%^jL+XYnfKXUS! z&EMwxvJhijbM-M4$}7b7;<)4qH%3|p$wnJ1XYHp$%v`ND4dI63LKl7M;+OwqejX%F zB7l-NJlPk%YH%jYFM+mO51|>?7KsUoH+0Lld`8v=e>SNKIqlUHLHa|t)cC5 zDl)TqTs)n(=(Wk_cgv%=K_B@O7)7N!Ww$Jc>?=;mS~;n0`uu=+!h6N=6&-fe5;Z<= zTgq1&W9g_}D_I&pVY#E(N{n>|H;aUA7~Zz5nUuWA74E5WU#zsbiU6K#icSKqh~>G2 zS?jIdLha(YdiJ@sn+$$T>2hJwJU8O{N)-$!JPgkk99?MMuBmF;U2Jw$BrCCB`%xu^ zS&|Q1^cgbFc`{PaX{*?XXKQ17z(XefR|{Ym9F!H!t0h>Hs5h6BrC_@l_aetz*xpS3 zu_?5ouqoUNI6J4Zu|_XHT_+i)aqnAdkYmcC{~fNYj-Z6C0z1k9q7&Io?R1EhFoNYq z8_d~w8kCbBU|fc9nS46`?C54UbYg~Kz2+bwSdn7hE*U8LIqFk8bD`dWSt(i`g?vFn z7KZoydsq0$(IU6DhX=y@58s<%-5s^LEZ4-A_jz))o>VoiNvWm;HGqOb45Y3 zO%ma#Es+%VzV9fjjV`OdXzpHxm(|t>x(%RzR~Q)Q)kyNV4xl z_Qx#)vm3jGa!=OkAk%p7S2X0!Py=$J>D;P>W7N@In4RJS7|F)B-MRnpopu+^XKWOOG^a}YaTc^werD9 z=uN9(GI#{JqFAM|6$kJheK(NZy^Kr1Ue2K~`sKIRl!sO0=uGyeja^dunL<8YD0>S` zWxuTlqpXw-rd&i{m5VZO8m9Ox6lhAR#jHfO2*GsOaLIPrbTC>;q}g$V%pQohW0T&W zny_H8{7eq%c4x9M&21BQWjfrOBDGkTVd|Z0u~b4{Igbl=((s$-l1fHEchpn{gV4Vg zPLJ2UcLH_fiKrMla*63j8@a@!^Z;ts}ltKGQa^eSy8{5$;!51l!zNeRsI^RM5 zreF*_Bt`yaW`;(b3~tXPigx|4784R&+E{!?Z9wp8ycjC`my3Xv$o>woL)bs|gnfQT zn##uqE;?!{@VqMn;O*aGvD*2);wH7uVz#qRHrMViUhAX1LkSL`<$l_%@}h&f1dl=$ z`f)q$QK${Vyz??v?8!>ZgGPqE5q=!mbZ&_EHfRAa_m7QZp)BRrCRgz!ns-ymKF`tS zFI{(<)0L=%I57r_tTg$Adj(5GJL_KHDxsmVZbne&Z4F^*pD38Tgmk9I?fzeDU;P&4 z_eCq+p>zvKcSv^(DIwiMcXvxj4kg_njdXW+N_R_24c*+)kN5lBKj6-f@AJ;7IkWdV zYp=b}PG%(r_;@t_aJ?)2E}eTwZ7D}tr^(HQL(Y$HVw3I?$+4v`0dCZi(}J(Jl=}Q4 zBgVn{no%YDG>}awVN&=ZK~|84qfilr*yf@Lf3y(@`ZaTF?g%n_+TSe#S1auPz*wiq zUB;3pTS5_+MO`YcuC1mxx^qh^6YRpm+MgMJCdAr!dXo<5O##buJ5k(%CyrxER&PxQ z&<=ySjJWMtRzAJ5#UH#i8I6Fme`mH5mK<{1BbnG=Xqx@jZVkj;C=^8hLOjJA4ZBd> zw{Ch?a}y|NY(OFtRI1Ojyka~>Q}wXs&SN?kNT-6JGTe>p3!s>iNnPY!%9RT@9q)-5 zMk4LID&hyPaGzcDYGGZkF@0E`1O6H!pDh9YN{4giDX*BkEArm?K4CaoGl^7dH8w_& zSF-*2T>AhbBe3a?H~%M`5Wo+3hX=yiugt%XC20Fe6$T>8^*M*gVe5z|gK5$oD6iaa zGLdNn8IsfS#KUV!NBqqu`#zc>)OPYuENT=^msDVA+>`;kM<`J5Q&&U~3hhk(-#x;_2D`SMBGjZ{G4vl+Ujax$+cQH|D>8V|VG{!4%0H=(@xDB+6IU9+Yh0i%pMJ&u zkzTg@4mg_fKkr+Nl+Xms;Pj_r3K=(1mHs3NDWiI3Tc#7eb2!jYcIQCOHSRUjZu))! zqtaZwDN9Dhj5ZKF{*ea%@#$ zo*Z+o^pZ`T%#n3F&D5&{RB9VeH~fl|{cFfiNdarK|Na{@+0M>AnUeKEMknHc#-Zxm z&~)?J+uh|9DBoqHwubE8PU6ks@a*SLtP0N}nnd<%Du@FZ8<{}`hdlk;v~ZLM-zc>1 zz^xzDh`Q>`TMXTGSVYp%DyfMJmPgP=HdF>45WWhx0{Szw{@sdhCsAxXK;=-j_@qCAbc&d zH^0t>Q?0aYo6Ozt^HZB4iyEKcWTf~}t!FoXMm`mX8EUV1!G2$1BI65Pf?H6i(!yHL z-kA{1MCBqgMzE8%;xnkVm?ObmAB*KDK=q;Aj7jXPqD$158O1^Rq- z6G~-Fc_LRodAPXRiE8TD_fE1C=vJwHu`^5v1h11d_~U_WQ`qW|Haec^S_ak#rYd>4 zZ!3+5A7D^3IwY!D_Y_$>#^R$GY7Cd4xg-`@Jsb>5HR{OuIf!%?=x32iMGofYh-J@n zU$M%=1wBDFQT%od+70Co=)OPS=o77_tz~zPvn;IPU-tk5pY;$o?wB@?6%6mJDT|Fj z#{ET?Q{05Z{`v>qr)p=_R0Z&rg32-3$t>h+wNxxZGoiJR^uev~5#8chcX?=B%xc93 zl}Caq*H1*Ebojes|5q15{0C#28Ssy-QVGvAoq51FR4Aw)dnPeHp#Ba~yj0aOaC@o> zT-z$~XljZ}C;XJ;{l2nYfVAlD*{24~*b4v^nC2iTOZgiOx6E9TzVg|Y@;ZaN_&QdJ z$5CFnlOBY)GWcu0CjRi>HEV!FU_it9!MR(q5C8LhSClnE$L`J<`p@gHjR(45>NBS2 z@P~E-BZu@ipDVKs@3#wJuRIew%Auv3o3h~;Zl|5^XqOjUOwK~op6bphCYVW!>xU(* zqXYyEnMrgj!7tNfB`cRyUXN7I;9GKAn4##_z8cAFk@hXn;Q}sAGgXw(#|X7iyl+RZ zJUdx7F`4A4^`m>vfVl*jUNOXtOG<0^%-*Sf7;9VlDc)vOUsGms(rTZkD{ttQXj6|z z5qA5K+U?QFlGz=cheiwvjtf?lj%Cq7D9VGWI%LPUQg?eR5Cu6U34bD5G>+9z>rExG zwB~B-eqAmpjqN$`WGtjQ;QT4CSQ?b>8Vo+C5%$S%Psma!jv3r=zz-6ll7O+%^rr93 z`n9*wZd9upsD+rJI|s9jw{zTx*Q>&OQ=#Mur{b@E+A_Yn;dMU)W|-e6XRE(LL3ox@YqFO7-nBABcf2f#_@O;HerH0w z>I-(Mrc}%pH_{a#yp?U@UojjT|3J+agq*eB#J89;DnoN)Ca^4kqcDM$keB6}MGS#b1@6Yp{2 zW21kB;@K&<0l8w6zDesEA%_UyL^EgI-Ft23RL5pve=1$a6*e#^b0O&K>yIzt-a0xB z%66BuDObaH(OLy{$Q0^J7L2?!@t4X(#Za<+M5rG?@{S^?_l5Ie;EPWrR1BFy7q)j- z_2lha0}UQ4y(P1!ar%rE-aZ3wj`2kAxec^unmPKl0T~?GVp|MvE_(+`JRmGCE;q_zwsd)I>7(oaKkS) zn{>Al?Y1?3^;-uS`MvkQm}}2_C2Ck>LzlX;4RPdw8lgbR89xYP5b~o9l12F^K-85D zkw|F*%!08&rY1QN&8ZNK!{P8x_e!b^p(&E$0+Iu(L8z*1+$s>V0-l-dZ@jUKQWl~< zWM@DB`v(1<8HB7D>)PG<3xqu+kP=9{EvnxeAxQ9uZoxJQ^o2!)Ar{cx%Q+i0JHMP* zU%0DvFW=H44e$$;UkrBwKcG0cLG1^GDJg=~-TWt7u^G#Ne4j*K-4zQ_~Lf**`tj`6R5YI;%G0hmEk! z{p@+i^I4oSRkO0;-Xa-p04kYCPVyzpZlQNd_k=>rzzB}q@YQMG;!C+SvT%2zi}$jN zRY+?l8vKcChnG3|GGDugqX*HpqCF(F(;#;1@M~UsnyxLW5Y+V{x5*n@qS>wqzU*+^ zvzdbnCVVD~nRiRomVzrc8Ska+CGzICben}>vb+Ph0@fp>876vD(kBY* zRefq1n&Ob*JY5eTsX$M;DtWqD(;yDJ-0Dw8*iP{c$Do;{n zDM4_|4?%cwWS#|`~v zQTqoQ5!wM7^{f>Gsuzh^((=kmZVmqM_?)rw3Xr8jO~;VaqS@_)9>A~olo54&=k>Nz z&)MWSf4_KlH+mVnzbGCr$5tSWj>Uyy?~Y~6*BeD|ASPEb2U4UsdGX=}9R1BPq}}6|Lm{G6L_70I6FyG)K_2jEmsSU#6z6IRNkJzcn^eyM^TO!{?*vt^^7aYXb6CK?0j=rj;%BfN>D$Y{I2FB+E zJvKl2R4}7L>b{5hMY6|NfnlteIdT@t=)9Hr>O&K1#ZIBjj`E-?rVRH`;c+Yo-{gjr zu<-8~^D9&Y2^oMAzVFVyfAaOt?NwNxXda0MJRSvCyHxfh%ydJ~@AfiMBIk(jdZSvg zkg)#D_x9j0gl$XUhu;#Eolw3W3Jvp=$aoS-@ooj>l{784YXj%meDa_Ud|ta7$n|kz z``BnON)AtEVR`1N`o`nH-f6qfbNa;RaCskzkE=LD&5c-x`&G6=!GdCVbqOCHOFMXyXpbnh2Gek-GUwJQs-6AQ3|DAD>zF| z$H!;*?+*_?3h0$LdkI0ej|9!f)Qcs0gvXm#7@Zf3ZqPhTL8_9-Il&6sEJmy^g^m?F z7;U?#+Rtb4tpg@V1beS-aH9Bc3*B1*O(m|x>-ShiwQUv#YawUJJ|mTnJ0)b(S<#tZ z(?#C4(SEJ5Ywkz`%^V#R7Uvd#E1SUb#ILi(@jg!z(9>3Ez?)aJuF>lAauDQSW1bqn z|1TCTz!>lj3xpdPcYY$5dOIf+GIqz}OQiM?Pon%C z$}bKnsMQe5H?~^kRXos|(yPu!-=M~m?-z!ncP&Aovg8%iFY}!hwJDnqBD|OOq>XvZq0>T9M z8SwQzac>OxcM%U1n z*?F=j4|NvmF{=kC8PaaRo?i==8j|BNk^41Ff?;&M%Z?svpVjR<0HOQvQzf3xgtIQj zlM$1zTC6uM*WY53T&UvFqu4-TJB?5Pwh4fdDyYN8gnFQd*CS)LCWPX?I{PG@o%;VAYX-0wlML1if ze8qzr%|_hmPGPV88LmE5(OmVc@I$Dr;rzD^&%OR+q%pyXzOO6z0$%Jv%k%GjMve9= z1qQlG?57*GaC#b8b~=f6QrN8tT~DxZx>NM5X|b|w`U2Dps+gw3H8$|Yb6P0@wjZ)r zRagUs7y@5AIMay|TQB#H-+HVFKIxly;)2+=ygl6aq-MRhgasDzklg(Hnlyh>8|;iW zn!QzN##0#(2oKFnb@uMu2{IkT7jh*eo$6$Fz4oM5%#LfD%wQy)cmvzPW41Ml?`U)d(`51*<|C-$NPnY zjV6lUNn@ru0NZt6SK9ELf2uNyDP!@ z%m(A5P!$W!;ewyOP6fcRNp_mae-O$;6Pk(^A1!0$2FIRhz5k1)$j5Z*H*ela%Sec- zlCd|L&b2}l$?NjoFr0NZXPwsW|EyF)D;wvFt~40h7Y4AMK5NY`gtA$_Ag7^acB5nl zNrQNL1}|UbepYc4tkZ=BSJ}!xx)6yEf{Kz}J~+=4n_rEpc$QUQ#CdDf0Q(I?+SpQ{LlS7i4pntS@RR4g}Bo*-vRTgY9;yh(&O#H=O;9WlVVoG9UOe|>K< zmH4f(v_*skv9KiO$w0Q3X}`U3AA~bM4i8rcsSKMliKY~pNTKmIjn_zx*QqwnI+*Br zhs#yw_4G>|CW8zBa9)3XBdP0{yKrV`At{dtx5mgG+PFxesJannMdKy8lBKC;Gis{I zJcQl%#R$UA?DdmgOULl_4?1t;%D!rW4%TC@!UV_eHqBe2J-&*L3%t_c)1Xq`58e9I zTo6<4Pv*PgV2nMOa4~l@0y$0k&(}gP7c-TDc%288#h0vDRw3B3XP55(g*Ni6Mr`rK zVE)=YpFp`*$mN5j{5Z#D)jc5c$*!oMBxC;8XypdJL5Ae6)x&b;`wOq8bIR6*X0hl2Bb02A@cPwPP@%Lo(fsUGkohSp`ox+ZCtn+_ZmW43`$ActDfhGU$ru!Ng zEVB;joK_f5UX2%JR`e_mJ+NV4&hB={S!&}Gw-{i2ubH_%@k?Z=;7BDfI3r&=sZBUE zK51{v$M?g>_RPd&g!m~Dt1(`otcEwgqZQc577FTPw$`S`ByVs!HuLk6zmQSGfaou_aKZfh)g`n4A5 zD5xjZ_9w6|i9gxF9oaA!43xi@LNP8EWnulUp<=`K&K-=I{dB8RrXw(!VBWf8X8&9@ zvuVEo0gMOIyJ-JXbY22PhLHeW#h*-PMlkN(6ginle~a#ju>3TSwWy*jPUH7hXW6r{ zQ}c4OkIFlx=5Ms^ZC;v@_o|>tTMUv<>-@GSZq9lX4b(k12n?CH7iU#?b>SBuXp>;- zrCZl^&R}CvEQrShb^4cU;v-C^cP^K}j`?L9uFjh-&xb>;?Vdy|3%QKGGUd*Fnl8e!q6ZwW-v9~|d>~b6&u{tw(XFMUFpp(Bj`r{vcYo8t1(4(0XY9o{+wZV2g4Tk+I1E75A8@t!= zjc8qoZ1c$4AdWd5mt0839lo)+R;L?E^1E6k-o>{{oj8g&#|k<2a93Ef0 zW#hbd-#!{H_j%Mo6$hZwbTP+gFO&mxc!Lee(PTOuBTP5S_5dLyB;IJ>?fLDwSagFb z)De5Vxhd|qg@pXg;lPC6oD{n;?F>;moRs-0Ql*co5_-~evLm%X?6=^S;|~fa8$*R_ zq0+J{TR>~Mf=%4ut5Z=mSAlf@mqbd#Dg2XJ54hP}jTj+Lj0%a_DTBKQX}(FpOU{q< z+Rot3N*mrxv5hT7tONAH#tKvG1WFdc8HD5v21fl$h8Nq=ONmG;6B^yEL3{P>IYU@M zZP;%lzG+k&uL_r>FbCMbMmnN4oH&aJjS*bM^E!vq)C?{k?@b8nfA{|s8gHukt)W2W z$$p%Ay11`veD7`Gz(?EUymyPYqiAur+cNpM_^Lk zKk;XrRkMpLZFctBpG0GtD;5rJuKoJPFlLmzsRSmLu9{`Gj*hPV%Emu5j~M}imZ`iJ z#Ci_1nhedjwKX->jt<@WPb)c;lv1I2@mN;10rIw_3KJ8MlLzaO^UxUE=D~Kvz_P5T zU($S7Z6wFM`u7WY+(n*ElS*ZJFB3D9oVj!d7suWu{Z9&B)VNWU6VVMRsLlBW`NphT z37-SG2oZGkGJh^&pWYbXP5=Ig{vd}?N7dmfe>7kwRX>H$+j6CcusILGoaDtnFVB5%{?kxi&*deC~= zz|s;FgEJ{XiKWH0=ZJuk*2>oQQE*UZp%UZRYXiGX_uWwWQcdrF5*EaO&+qZ&@;6LR zb9W6`lbXrtaL^!91y$4_o8Z5AX*UZZF)%d=D*!T5!l;dnCj?ff1dI;K{7Gg!4}&BP zLMR4EFzx>@34xsktV_8Vl2;V9Zs=ZXhfe!0&37Ay{_Vg`>m6u$413x+s;Q}Yr?{GK zns!UdLzY$#l5MS=4OR2{cUIUK0b*Dn&n21TjkXB1{rW4C7h-Zzzt6PT+xSU1-4<*F zJe{vn>Zby7&vxSYvkl}o^B4wlt(eM5KXf31kcto$H^3jO5%5_q=O=6)CbEpO`Q34? zDNiG5_m80E9J>7cxq>8pHm*EY2?B7QJS_W%0#9K(gD%V?b*4NW+`9ZoFWO>=j=raY+0Kl;dnO- zVq`4q!#y#C(4%y$5A9eyzQ;JTEAk$vOV2~*K-D~y)oN7ufv~9>;NS1xu|TQ8o2@oobVF2J6Vdk1n{OHteo@3l=BOSbIHMQ> zL5K_}1#kY$gcq6|#yHXzpG@DTAIm@+auK&n-!P(|QGv_MQs=ftWoCDfD?-(4^*E~q zR#-*g7evtD%M>kKrQpf}B{_0lqv)GYnL&5wpBZlE)qB2Ke$$BmLIz`tcRqb)ASt$F z_jKH~GsNzstxcL$lSjQa!{b#0^_AChvAG)=EvT7Yg!B{CpXt=Vo)Y6jtsW8eue`Pe zK&)l=(GzNFz*M9)4f>9fuka1A2O&nK9+E9~U{qNe^JP$>`4f*JD*=-QPQ!MO#CRN z?x3>sq|k_GpJ64E#S7QUl{}Jmk$~IY=81T%N7sngp29-{agk$8l$faB+s$Fg^z3>y zxRY}s)g84v!z6q)sUe#J3Yk$aAU42pV1F?D#|b`uY7e)2nN)<(lfGB&$`Pv0Z->~G zqvH9a01?dn&V!!%8zCQWa~yV+cr^xoT~Q(bH#C)N5({1US+}DyRF1MURI5` z=qY2J$r5cE@H(F$^6&X*{?_keOuvjXq;m<;pGv@};!8@j(91BIW{v!!mhIQ1$?%%^ zzZ*a#7*-4(;3&jK;`!tgkB!-9b@&TsIX0QRo$&mblEEy{|KC)nQBK zyFwkSA>-Cei<(IYwqfSlK~TcPL2C!D9&xtAp-VXk$wDP7?Az{3f;`OEk>3P38Z>Ym zU6l2Vk^p}(pDTFz$jCCEgWRu!b|?!oT!Fc#H6=pGu>kFR zOqib`*WrD7BrMlx{$F$SiWm&(PWT@S&DcxCv(}})4UHf1tU60VarAw zp-^|m!$pNo-82>VggUTX^6&hrDc>`&M#O>QkZ2~jT)z98yd#p;kc}h*J$$gkE;BNC zJE5PA(a?>gYg1!5ebU`<{Z%tFJ6vLXTk$x8t#=A3xz4E7xhvpN)=6181ub6mDyY9x z2q)c028YV-{i;40-vhugcZnKKf(=bCC0_QHYVLCz{vU&PTk)l=i?&plU(&0-9*>*v zSo-6Ul5zr5JM%=oVjuu3hKG%9;NC*AU9u@cWHT)*t}sidCDftTUUivbH#Y+Mmw9T^ ztVKoBI^AtuU4M)wh%&20S0jN+uV~RpN??Wd8piKb_I=pOoNaMI>_*=dQb)@CHv>= z=>`^~5AqYI(M2YUiQ!IT}E{-tdT$5zP&a$~|y$Os_2N6+M*D~5# zl@_XgZhk=!D-0QvgE>@x0Qknj81vMU>^Pck@fh7@i6q6rlf2=}+tfX|gryGlCo!MdTg?Rbf~}Z$+$bC!U#?IK@xS8c6`@9Lt-YLu@w^vZm9Ti1GiQ}= zTgC}?lyl4Xg!=gFzYc%|$g65V-H_{DDwRL(=FgsoLZ-zA0#y+Qdg=a*;m>1{G9*^k z0qw}zj{p0Ll1T0wm^?97QiXr7yn!?N^d*38UOVIZuOt8a7#R*9A14s(@LwyC#xbp- zA*f}3yNu;OI}2%CiMFe&7!wrwzy1R>v4B8OJ+8U$|N8$T1_3HxfdU!-8)9GD8yMrV kdY<3^IjKLx!bW}~`t}^np9UB+cmw&!NGeEFhyert4}ZUIh5!Hn literal 0 HcmV?d00001 diff --git a/docs/translations/kr/clients/lite/pics/transfer-tokens.png b/docs/translations/kr/clients/lite/pics/transfer-tokens.png new file mode 100755 index 0000000000000000000000000000000000000000..c6635a30c8b57d2f1765a3ba6e3334489a7775e3 GIT binary patch literal 26410 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 L?NYjo;nRNsuCn5^ literal 0 HcmV?d00001 diff --git a/docs/translations/kr/clients/lite/pics/transfer.png b/docs/translations/kr/clients/lite/pics/transfer.png new file mode 100755 index 0000000000000000000000000000000000000000..7642e996cf323d1483ce8b1b3aa1efb85b1c1ce6 GIT binary patch literal 18492 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 literal 0 HcmV?d00001 diff --git a/docs/translations/kr/clients/lite/pics/trustPropagate.png b/docs/translations/kr/clients/lite/pics/trustPropagate.png new file mode 100755 index 0000000000000000000000000000000000000000..a743cfc72147ad521c2fc5be292c90de47faf6fd GIT binary patch literal 49750 zcmdqIRa9O(7*2>1wKU|>jcvXbgxVBklQ2Irsvs{^ z+Eym&eUzf*zVUN-0o@FGR)zq_bM4U6Q(uZ-uHSz5{b}R0FnWr72?U8^AUrELbuUzU z;31r>Zn4w>26yCtKM@U-$`pXWFoF2bphR?&MC=OlWyX)uV8Bzxxi#4T`~mzNnG6PM zk|i3jWc$x#z|V>M!v8f+QM4EenE4o&8}wf@gMm2j!HcN#H7iMVX!BLe^ZzD+>mMPi zM?q0jqo-%2i_)i9?`6E8Qs>tJZ{GfPv-b#s`!a?V8L2P~Du)t`mk(t$iko1BZfj8q zs`tM!i;{$J)45(19`Ry;O~uB$Gn)g@e5@At5s^a+&hWC>HJhS)jC*d_g3L=z59JySp(L z`20nUk%m8BGzlfDJ9qQ6gxxP-xl`ZD_YRPpbbOZe^#Ysu&IJ)&p`{qr=h!dlso~T5 zKW~4vXV+i25*tc7W93T3{=4YQguzM+$PQ*t*>R!=O_esK?THj3z{o2yFnUO>(@;$} zGpm93q-|UkU(~yl5a+yWuzhv(II0dWZ9CF!^N7FLXc6nk`x8D?;7n}1jP zWk-Rc%OG5P5f{W)eI1Z4;`=DYnJ`T!f6K;iBhn6kC zF0y{GOgYSKOQ*Xnrxqf#{pkBro{3_sXu3;jYa7w}jf?2IHKz}U zsj9#o&B`dVe|m~4XavngH{g(7+M|Z0+V~&@9+w072J^daw5FWOXr@13i75n@LOQ?4 zqBZHhXW?SyMTZGYlb4$tdA2Vf1%$LgE9Qd%`iBS>&w?caE-$H%?+b3;u@C_YX?{Sm zL`2J?9hhDfXRVeX!u;xHLax|b4i8AS`5CF_l5y_oz#QA=^%~Ehnh!XtO!ILMY;f?L z$R>IpnHm(QMKZK#ciCcfHJXNBpTo^Y3fyS_9J)cJHqTeq00;Z9T@PPK)=SQWuTxK! zNt*AMs7?N43YR+h2wk8iFIo~T$bq4Ut^pjFC^k2r35|Rr; zb3l-c2nl#ZZjMOau{rU>8gV9O3M|%cGIH29N-yXSxli(eQu@Y1Bi|091Mj5pWqn`a zo;@6fzI$RN5Q5BoJa$txz+gC;Pz>DQtL>|b+}=xRO|5dPxc|Nta~eMG%1r3ufz-0B z3K}B(x@CG9=i1Artk}VoKCFb&sJnFv{!qNQVixllyMMjmp4HqwfbbqS$U&oH;P>#2 zl9KJy{pn0AKch04b9wTg0G1NA`>b812SKYy!;<1_O;x!=V)O!8kbFjPqh0q<8}#hM z*@aotjcceTx!<#3Ns>0%eBP*8=}B7#5Qu2EzP&dc%OE@03HoJ^nV7+g-JG5;>^UpUMlN~|pO{jS+%4S1zn z^G%1}d`j7}F#vxp^Nmf#T0{MMPV2wg0KGKuCBeWeU#*Jy@OOu>p~Gapx+Uq$BD}qE zH=334_?Bur{)#8V<#^?!HQO$2L?_Y{PJb+h0HCD}K9Tjt{rY~Tpj5ZRkA%aP?sx1}LAXkpKMy<*U zC^_`*hz=+_FkPzS-zfvGuoG43Z8fZcJpH)rps_;mn?`XK-{xRUZQibF4g5n-hS0VJ z^Dkr*M3-yLYy%Fw&58KFdzl{t>thSJ_8A)(B7(J`SVWq_%rq{|G3#oA6#~1wrT(3N z90e=FpVo0U`s(?5%nxaX!1Orpsx!jR(}<-v!^-rEr8Y+X2o3-`;IRD0^|TnJSN#01 zxvx~qZMMEz;_l@-3+*l-ws;jgwlD8m+We)3*8NxnPNVH{D39k!3abZSpZh5SHPt-x&SaO8z?@+6y(YrRjIsbPF_KvyMh=v$ANz`M|osx=MQ1c}zW`9RwY z*jpf&lEjxCK}-L4A!Vr!^S)s}>wOo3zMl2)fGkVeecGYMYXjEplS%7VGb9)ux^RM% zo{>nBy2AH5hMA#hEbLNOLIc9k#JWeo+wEo=rLG{o$wm7=mzz zC41GHXaRP1bdv)0Ez2Z|{aPexjx>e`iy04IN{!y3K4>-+;{F0PN&aAZ`r(Tp=fu_2 z?Wna#x{NlWtM+evDrlvc@mn;-wwd(M@Q1*7_&B*WzE7EfQ&RfavEL(tF9%z=JGibQ zn%gl)G&+r9uwzh*{DhDpeql?(Eb2UGJY>l@8 zi0iOBBbK`%&}Q0YaYns&f2P}c5R`4U|0enHxmrmq##4fl@2^ z>*KNWC9+n7!eWQJo|yMFH~0G1?Su*P;20}MJFgOnxuFprPNHXq;Cs=01DrlRh(-Lm z#j#`SYs>M#eEZC1Gf-C)b9zU=+L{8em`hV+(o{se%9i2sW8eqQ1BfAgGmBJA^k$e7 z&xz=<`cd8^Q#n-3ZhmgE=GQX(joN;&dxlxl)|SrO$m^Zg?^++))EUn;?r$CNAuIjG z&WL{pPsk*^L!5#jpMroMbu;ko??7kegyzpSKkTyjh#fh0lM^kX8i9q7_)a9(X8wiGK8Jpo6007Xl;R#tQ{`ji}}_{L3avUpfCVfqVI9!uMqn3KApH6smz5NCh^p zVVIvyjNl|X@MaVgrdn>K{uz&aWB$GS9wbHTR6C=Ee|QPCpo=VTL}vvNxIpg0gd=IV zjDY6|`O3t@*h7w_MNOQm59;gkmmWH@V|@mRE@yP%p^Z^ASUky2Jj}y@?pZ{43!UzQ z{Z%S9aBNc85#^#TWh1Z*iR?|Tz%R$LWUaOzOPFvM{m?S2bwS&co|TtmLu%E9eJbe(mwF}0cgPxZZeDF$_+~>qj70Vd;EV6MLt0T-a8H^o1?n#d(R| z-mn>I30&hwW4b@z#`%xUih6tQR%Pe4euvMu8@lW5o8H3 z8qj_JdgT8Rr>zh%?_Vwp1)%Rc^1&jW&t0&_N_?@W&Ry#SJz;!<-*)U=AkbxZAbach zih?aAPbz%H->(5O-6|%TojDbJbNa?_ovo5Yo&rw>8`kt?N*2?lAy_ILe!@;`h{vyUYw?QIw^e{h zf<}1&CkJ9{+aBeb2hX0q{SythF9>>-W#D%iceEbO&ctLEt@G=-Yy)TG* zrw)wxY?wTL;pVdopGVue@rs^nL_@+9Sli^hmi6@d#1ms6dwiqnzJWFFPfAwN=dz}Z zY_APFv6{L;1n)carhRn?^D7m2Ij3BS&x!c+DiRdZ#b;l`n0Rr4>i=j8^DR3r$mn+} z?m`)ZK2I&kjF~%OeI-bkA|P1l*+!Q$pNvt7!}(xPKZfK7Nrk8c3^IRHjM7;>AXi?_;iy|~22b8GkET4E ztzg1moe?0H&c)x4&-%5$|FFVgv(ZHvEFW0kPwuJ-G$aOf}*PaHAGJ-$RBCC4#4kpd^$%H3^Oyl_;iiByN*0aI90EdCM6Bp|lS9Z(SWyB*`OET+yx|)-x?%RasK5Kd_*Tp0SclM`u6iwq4h#Cia90>OKz6`Gv%0Gwi%@@k6RVMTFIN z-?k~;g%gK-9X!5Osjr;xp4Il=>G1gE1w7F)2FJ(Be4&Y`{AQ2w(?3J3MVm{wToGIX z4gJ?~S$(ECV~Uz*PR8svytS}fb9&0IPkn8*MG1fWsr`wKP;^pXT4k-=RLNfVk(*v! z`6mQk0xQmFSiK!_yA1_Un4;e~8rR1*ppm(;6UudqA4f)@5I|rcchkhb&yh)@V$yR9 z`8T0502&cxS(K>s4tk!y7t1vidU`0oqNi|DrOb_N zZawjvKbp5+BkG>aY403MCAc2D;j$RtDEHOyD|&et>C*WIzi2v!7+m)!IM?H_@+a1=c;v~kj3m?X|G71S;Jak%q{CQn zwj$oZ>(R7Jf1%yeX(sqM9%#_g+wJh zqWe*N0+q!!m0S_N=C?#93}M=)wq7X5u4Xsh+3Q;MydlSbdtEa9buk<%&<4Ylxw zs?F(+iJWt2xEgU%8=^x1QGXhUPT+iiU6A5)Vkquu3lgZadu^?`0&c#;mZeK zL(dB)H{Ia!C}`+*97yL!FwmzSmX6bUv6}h&;p7-mH>Ea?I46_r?1m)rmLL+1sB%CZ zFO1{4#r$MZBT}0$zuZ_z(-ma^OV2CjxsoONPciAu;J25}m9EHXSE&>Kf!UrEk%_-i zaGjoTS=w(=2Jm#M{L4k&S)Xw)bL5q^vKbPJ$&O*mFlvxui6L7s?VLhCNayga~vcJG6tX^5qR^W6r-GqcV zd~;|?P8ZN^{DK!3DjZR?S(g6fK=QzQfzD|DO61yktr953|9<))FGQ;9oLFk}=k#g0 zx3jriOO>t>(NC2zE!wZ#b#eAh)W{)49X>@8!X|D{wtutBln(QgTE&|S^7{9;FC^%) zlsE71EmE)N?l9{*M(%%W*8il)hKjs((fF(VKLaD#TJ%$xf6P~^KB_0|V`pUyGCRICiv z2?nu!lY39vFc~+bgsTu$tUBX!r)gNhB|fsG(T%+pGAbsF>z43*oyM^Xrb_0MK9fPk ztv8@%%kNEO-U-`3Rhj?n9o1f9Pk`~j3yysh&#}XClO8BuG1yOZpt?SS7+aZ)o|OFn z6n5n$1-xG2YlY!PMyJ48*%G6dbX#KJt%Cq0!X~|@aF+@E{PfHcx-I2S4%1u#ui<}m zGKJUf>6$7Y_4}E*D7_PMW#Mu+zS59&SL0I_@RsRwngQ&VlqNYhVR!U2zP4ohj^l*n zAk>*q{BWE`>!laSHdyr-e$Q9z0gy_w9LkXbl-Bh^?$#8v21bh%|P?I7b@@LP$ zvbx>bPA{!Cf&JRha^7kyhV;Py$yFtx%Dorom*AJNTwy;mf3yDF$Vli=V?w^C$Zpgj zSD;BoMujB9EFvjs&(05{Eh?un(oG{@`Dje!ad1a)Y>-M0K%-B$ zVSr6L-P!hbR+S8a;@3+JieZGVo=^(gbNTJpWnykq3(I7JkrDXqL$%U)M3g9@tZlT_ zZ95Vav2$o8#9i^#IsWo-|3Hl@csGNITHoR02n`?-_K)81HJp)2hz-Ld{8zoTZ-T@l zW5Bztd!^3c;=$9R907!6U*Ymdn2;eTJvn(YyXI5;3FX7kjf77aaXbA+lx1(NUwQtO zOSOYNVKmRg3-@W`Qv-4uxM64=>xHLHk#|2`RqVDt6od zJOSCfe$VU3B1g~~AdV>}I^lTu$VfmtBD4ESS;3J$D$b;a-CP(mn82h;iF-h#;{sF? zu+v1A@u?FS0E7F8x7onEXaK9cXZ{O=O92ctzu|BFgZr^c(Ng=QH{d+<&y7ZrOd#6H zff@yaqAxlIDh@Et7<~{SwdtZ&Q2~}>%)kWGD1_PA{7&qGU=$5mCU_y4=V_>4;}zprJhKU6a`r28Vsaj0pYC(>^DAVq?CXKczgF& zsCBLFW0ka?_GTDyU=>lqUz5Npz`K)1q40-fz$hVi{HzJ6D>1-LlFU4yQ|H?OYjoU! ziR8gsM*#Bt#(S-iE?NM{lUXy{mxG#AANalSD-yvl)Ei)pocGAoCWOEaVh5(zOo2p1|H1-hl}=rFR+fRk z(j|XGHFfkTnP;EEy=i#%Y_&>q6fBbj)CSqX-*YnZ{xq_ovZn7vOs_#5a9` zH%xGWBSadAUqhfEL&d>~fXARF<>bV?yu9pRYiexdsMM+o&+~tRXJ%%W77xz)1r-wl z=!VNfhJg(!6s^nYTDu#rpeJj8e}Aa<*sen{H;O~q9XZV@^;wNzFZkF*Aq+;5yLbnfMG?;NsoT`%Sl;U zO2H(7T#|d(Bwo;4;O7J7%e2}O5)~E2thWF3r+88u+tRtdA@q9<)*7LMiJe96$;qQ6 zwTbX%56+O147wXSHvNK8^q)3nW|cgjOH8CX z1QBhHTxm7smksm^wfUSL(yl^N!rq!BoB|sQ{>OuiGJ%hU#zm_PbzhtI!*z7j;f#6m z4g8tHPu(vCDB$B1*@KpKGyZrI0qPT2ig`#$lQ77K2%@3j`o2mmB2R2|I4U z;OUMI7xE#ZJNN>vs=pp!`2YCu4xn)o``B=}LF%#kqr%CEn! zF5D=R^`qhC1%IBbgdM;{E6(I~1sSN#RNX zMlvoaGGue6j+G?8oOdXGVdJ3#o0hnuZruxk`aDEw`dUzRsM6w@At5+%{0`^*1mhw{(()E}_^gQ@NLk{G z`HoY3m|c#){#O`LY=Ql-(bDurOCV(ME!g0Lc#d2QHXG5 zoRME>mI^srp@vcV#oIFZJ#JQ+&4**9p15D43tDJWoLI#VCRSqjpskf1wj&PWdb3dbT4CFCU0@MZcztZxYC>g(?7!$^CVGjdH!`%O zB}(;*^0eUp3xCZ2(sxlL1r+D>-I+~85WWKhuYS~F1eq@P0Zyni9e4`D)r8^~IYm<& zM+kVzdN;>VwriN8%tj?sZmd9rj31PgCA6joJ76G)WWiXzR+z5gDVbe58Pbh2A7ndp(#gpmN(Yh_Amp%mBt4a4Ivm- zj}O;+=;W8NzS+$EU+H6#6TO#nMNxqdH5kaqE2MzvK((=@59cHDX}WqJr{u!Urm3dydri17eK zs+{*QA=LQ{iT;RO`^=^BNAbJ46!m_#EwU21(KB08x&-^d+E^tIcGuvPsZ}8O5FfJJ zHJJZNbvzKs4BswB$tOez!@7$sNqY%oKlOzD>!}@VAW%y%$Qo!BWBFvG0jtv*H}G;> z=6r2R?R%mVT;>3MlXu0Xuk9?c&{g!{FoJD}@?FevFG#wkBVXs_$+?*;L_QD2k10fA&(?akW{{2}vohXzf-5ee~?+;!$ip7oK zA|1VjyXzpoJ@&)ZN~&C^oKUin^?HjV#szvurkLuwT9P=ilRWd|Xp<&p^r+1;zbL)} z?n8lm40*X-RP2Kw;+!n9$9>0Yy`RX>Qzc~1&I}JYw^E=urmdG9+F_L}=qmJ@*_ZEQ zkv=y#!S6rAddV1AFG04df&x+S65Yc`)n?XsTPWWTvv^&fU~-4ScNdL-XhRj{FDOH_ z5AaYpF(k%Jt{;?XOJkkM!_SoT#YSR#x(Y@Lv;ZdfCzV9UeP0ZY4*$4_X6mhX%e&CD zc1nRjrol-K7stsjz8oSjnn*%hUM||0xtX&gZ9gxn(iJs0T02$yeMSVe zPKVk)v$`95!Vc`e#1-UWLVlTDZnVVjHulE#!^yQw#P%Ywy8f?hW$Dm>#xn7&bqOX5 zAXNu`Apg0Zc9LFx=Sp%k;Dia7B8a_QEu5)%C%rkH0~0=T?0;KEAB9RJ77)SLh+{;P z)W>$ict3f=V{ZRCnC6$&pZhI9v%=YY)9mHj0J=zxQP6UjP=jDK0`|Z35Ze~@f@$ZS z^x1cJ+(6k6hdqd9A8rX3saO0?Hr$SRbSI2XDYG%O$fV%B^&s>!I{lbNt+sZPA7m%Qz2N|s;fOnCq9B>H4;*nB&NnAR+H-Yb!-QAz} z8N=&z16lBsrLREO>5s4XyjVwZ&;<7d86yr*@81aC95M^ii!i6BoccoRc#77exp3Et zaUHAQi7EVlM!)scisFdq=%$ak*t?)g!({D5cxlY6ZDQ=x^Qk9MTppLekHJ3dyoHnA zWCtMml`@T7P!A;%d!h8OykLV+gokv-r!KNN-*eLgkw0P%RACYQ>yPafh_4lKq;ojp zwiq>vHPfGsj>-mx$p>Z0#ie(0<4zjZZl#HBZYL;$C z01muB&Bt_ANWk?U~&USzumxWHXrpItlOn6^_W%-JQcyAVFo>bHoz z?-1}Rb>^G1^PadF5S{8+v!$kp4_J+8Nz?xDn!x6!RUJ{NG+V4SpK04L8h> zxV+1;C(FZPGHrr6WNC&+FbEk0g_cJw6ZnF~lUq1nqDXcgJMwyvLv7r8JO6VGc?)yi z9aIKT>6F;)89`F?fZT}mB=*{@cHJS{|3Et+{ln{i`XGC20?sV{zp}jMiHkkLAFl|T zgSb90&&~dEikuWknjmQY&O%`y2}117BV~Ss3Y}>LBfvmEV9>koFt%MB@Nj?mDn|;) z%k-g?M~mQrUJ9t;G6GHj!$ZEY@WcTFpMXJck1YNN=uHsw(M{;M4^xtU$0E>`g-5Ct`t&341{PW`J}b$K!Aj44r`tl+(D;w|g6 z=R2GVwE-pqv}QuTBz=%NS}YR9lgaCKxNf(APu|h#30DA+R^_sZhy?&1@g%-(dCnJg zrbU)vZl}Sj56rh2Pxt1;%)NFy7DcKhMbGtThXC<_HtEEc4$18H^T5O=ytu`F~G9uScdy}LW zLV~pE0j@G+-1R}cRc*zgVF#QG!F4RHlZX6BAM=<;8`es`)xQIXUY(&*{7yd~?EiPK zl8r&}JVvhBcA8SdxGm}8R9@&6^W42({zQKx;xpT~E0suAmXKp`;d=jD%(U82QMEFG z{plxUu4;=9fPV!5-hjg@qUWgTvw4XimQhl7hFJq)BOzC3u}q1^)}! z;N*H=KD@O-v4(lAnRgm-n~{ZJ>LhXG&f@v*qQT8w8R)b15XRTHr3>vb&JM$P^8?bnxkWxq{xJaMjv zkwxqOft_Z|lMuI*2Fott-!a(UW`qwFb@q?*!~5*V4lf%|6KmN-mrTf`=U)Qx4Ec5|FgkCiqc$qF@y^ z>VZ3yF7Dj6+;hY^cD$PSfyKZzyp|2FskCXb*BHpyh{jW01E z`pW>BoN%Q z)aC{omV{NfN$<+Phr&z-O1+A-4PnPO{4P1uc z#)IPKuYl=*I7MVgK1?ShZF$%i127$cy&MAA%lhAi1pdaHL|TH-&{Hnu3Ap}H6cEFZ zkd`KI3wO?b*L8o2E`&XGeb})BmatoOp#P6^_(QogUo+7{;Se?jQaYcIGj0g(BY}QM;4|&h&5hJ5KzgL27~3 zI{Le=xuV|6FEuOHf=5)z);DC(+tT$vS^n)=u}>%5(BJ(02eS*foL!=DB|Ffxp;UGf zo9;RoMWWzefYJn~2OJQmJ0yn72kGd%4=%IF>_nZTDv~_&*{1!7&`g5%QYY*u*HEpF zq=aBpPsAh*~MvDmlb7u zw_op49~P#0ZR&*VL2#pzM35!}_}&kcIKct00day^XtUQsvGl8qb5k(l)9S5}eA8x= z_0L825~Z0SzJ^{iQ!!n<7umY;Q}EQh3)eEFBdDpH4Xr(&g8D6wa1#rmn@oN36q9_izl9G0XI@;}n z;2lv6f9KLc2<%ta|19fI@HuPIloiL; z&5P2gocGbv`y)=6CK}y;=K-+z^@QxBqne{d*A0jkxkggY86hCh8h+{icovlQ*G4&u z%Ve>k3#LBlf>*n&&~4jg4CY@9N~`MHXpJD~g+c%-q8+3+5Bjqhva)gm!46ilby{DO z>31l-eg24U$w?9}5`P*>uf5&2W~g27UlvgmUHwQzm9q27v>>h+q5U`TgG+yp=WDkY z;!i6s+U|b3Fl`c8D)C`)VZ1>DY6YPg6;a?VNkAFS^@E1GuYOPzq7)sHXd&!@4^xi< zDk|1BZ%xF7=wZM9)+xz2^$tn~pT#mX^hj=Faf_z`i+z>L%d5eH@W_=mwHhV*WUGOZ zJJq7^MJ+-Z0QGsK#N_sE{BSKFf{vr-@7w_kK`{{$zF&J|rIbpqM6IKWqA|9rzls!Epp=PG47MxvHE zJaxZ>0i3z_4lQ@%7Svw^s#+nqk%p>xwT?&*+XwHD`xe!V8|%tHwx)Lke6vOM!wH+> za-?VCDRyR>^zk%r=^!|;590@RIby;AgP3j0B#?(nmdDDKq1qa3rpc$I@*!};{Q5O8 zq=t%dQt6g_uu`2qF&Q;tG))D%%o~#l+(!mSwy9o1OUwsNNvPP$l8lXth{YT|F*y@l z#Y%v)Rv%$#oro+&9^nbDI~N}JgH#A{rQxA&g_5N$|8h9Lbm@tg6S=_2$KLou^u&G0 zlNJ-9xU`gR;f>bx{5Zzhb5^=mdGFIi+Vr zu_Utq^yQ$Cn+BcYjmb^jz}c^OO9-IBQMngNQaVt)KO-Zf&F`5zj!1y|rQPeAdMueP zq*N)ZP_NOlT)hOr`|gxZx7%i(T5K?$SSWgTB!2hp_4(rdKEQ|hwKXg(>~rXq)II`t z1pML0ZHy_SUKrLOdkD&jkAgCs*HW!foBu0+Qc_ZAqH6>)k!qLsS4;+NMO4EQ^(bIX zgr$EQT?FbCn0R=2o|ik&;t~><2YCTIS9|02jg1l|@+mVF8Z-;ldKgnvQ~kFeHOYJu zK=E$}RP0NF(DT(eCb>lXUp{K;!EJK^KHlDi{;yBLsLxMN2xfM`ErXx`A|&-=X&D$0 z>FDVCBQwuDju+^D`oH2+$tR0G-~B_w#iflIJIY0er?JJeUfQw5g98p6(uI;oq6aR4 zcfLGhKb=ldiOd0gvE%Cr!uIKKEI|>l(|6SUY^E2M#3?Ugc<$I*m26%z!Cjy>UfD9OuC1*J^Y>5I$X2P%$%rW`egbGQn#kLYE+4Y*zd})h_9wH7zMd?K)2^?q zWJ0fsK9le$hkLgb>s_;`3x0v=~@{k{(url!j6?niS@LmB<6+S=MASXN&f zuj%LbhBAdQ3kwUO8a7&;NQi}fX_qA^?9fl5u^0+v6UhsWhD&5>tu!)3gMf)~aLG0U z;eVoK{vX+ZmzS5&1c7NIHx?_14uC4EAvk-{1mxh>3zX>l%QJq|PUnflA0AqZozhAO zkdlG{hmPJq2F-URko4ASHFx-QG+!2M@_oJ4aUGq#kB%aneSkrymeE%=J?nZ(6Z(?C zcpT~qxXr>}H~8R7eE|+}bado-cbY-!+Sk|D-(f*RLu2}g8AVuQ$E=vhV4tYXBgdSE zINmK=Y=gHv1i}exx4)Hvp=z0x36G6Mx`zbrw>5nPEQkq@XyJ0AUB1za6jcL5$#Orb9qi}ZLJf>fL#4GK`qY&abJxYL>Pbs9Tyo_ zL`dm@^@jDM?ckhibmXQrRlMy3gWw$G;iGs!@mqX(!C*1)KG&e=CeO_4O`4Q?_pM0#PAB zL|%K!Bc&+C-^fU~Y(Xz|IGa2^H)&K;e6IPV5*Q?WxRcCgCixE3qind}Butuwdv!f; z=!FP3v*LIs$ymxm>hh_Kbd0+@vtNY;NQ{S}z&1=me84e0)4rw{Tk$$n;lu^}qrur?Xd}fiCy@!X#LY0mRt(|_YAzzTz z)Q{4&6X1&BC=ocZ+(8^ho&^*XZDYn@I(JKc<`SoTF$9I?T1cvjS|MhQTj`I?4&g!a zIX=E}9=LYz+sXty|9>l71vhk5b7&&^Q&JibW?N-;@0ZsZqK<%GAEaXDStUR%tcuTR zCull{imxP-N-4xG+}2cS*U-a(()(M?Fpsi}?4Gs?ns;nVZ?+}2oxYOc=x0h_-5@CC;0k~vSfSg1RO40 zo^EW!s_EF`SBmansrJ>9a)loyPI59ytT}EG|{R?34!OL|6mU7f1WqJHBwhgYwOF*vX$#^pzH}bB>ihZN0s{ zIkmnPOLE{Fx&6p!@gWsaF#v?tER~t3VGXt5Lo#2hc-$3lV<3xep)V|Tl3CG@#dOQI zFn}wm|4-m6G;ehB%ulXK;~xK4{mA5m9!N;Y?cH69FVR3R%%@lYSqr=tL{}xq9P~#N zi!2bVG<364FI3e&eGU4Q>9IK2l3*rjt4N;nT?C$+3Q}E~H>{sdBKryvpWB}H%kg)U zlfu*v+-JDeFaO2ge4vT)v4bAw`M0W!?PaF3?J;T5^9@N^{ zhCD&~HO;Qr(JMr~$S;0fMy_%{LYE3U;MoF4emYXX{OfU*6~k9N9PV<66(^tRUJgR?i5g2C=~qyoU6r%bWo z17Juv39i}Ve(_LQ(o4W69!%%qjP+L{Zm50*wCmbkeq;ISPbL+Bq0!n}K;s<9sW!&2>N$-2_w>pv_M3JB?HI`@V3oi}_VUVy-7iiD^8 z*cdLsbLL44-4elSz9r#?e4-tRjHzTN!K|+X73ALc;3r#elfxzDLrVxiiglCHEb$mZ zSpu)0W|HppVTbdd>-D$)ka7tS7=W3}MVT~RV}_yTi3BiH?#}RQW!jZGkX1~vgWQ5# z5P1Mji7<|&15s&cCNgusnhrwpT}k1+{FJeVw_LZOurDp=H=$9t+kX=u@2Ox+d4>36 z$$UN+TVkev6=5Bm#Q<2y?Zu>DxOX5MI&=jnU7xW13Y(sjnHg2Gv|#zUIqNKK(iwLp zASO^Pl!Pw`01TBAfMl%dda={8K2t*!T~jC$T)mmQXq-@t&` zt|q-aj;|?~HGe6tAIP;;oR;%*WIqW?#qna+3iaTQe+L}y&^)w#nYY2{$x7qk5PtP_~p+ZRxbcf8c zDLf%p503+j&@j+?`S~!p!@}9S=dO*xD2+-kTtPR`oq|vVPtPu1sF;#f&djdm%Kq1Z zOhj4k*$Sv1<#|ofpa%e0!`?!3NYky9W0Af)8lAg2|3wop*|qPnbKW zrlf@G^f<>}G|@1{)DM>ZWhpEyY)C)~G&nq>f86mFCOw^0Y>uIesbM}$NJ=9AQlriW z`y}zZxBLk`9%^u24@FXVFv_sl)dZ-q~%5zY++OIkl# zTUlNru89zVMt}E$orST<1%aMf1o)@d93dZVRI5zs!koraiDU6$9oJtlgLfUs5QlYFbsA;uvOKqiR9+htQzj1YWl6@HszC_v zGv^Ja1L6H^Ts4^{4a|aPPu?`xHh#BjGN+}i1e2gd)~eQhK)|{6reI;qvS4+@@3NkFYXqoRV&8Uz0+XYO772lYV+Zg|i2JOcL7iz>z?7v)4# z-%uDLPUxxnN@qrD$VYT1t6T8Mg5Y%BVTmTdhEv)gdjOF{oFh*1JJ}i=8=LxX)C^pf ze1f_wo)%XTduQ^598i#5_Wrvp&YB|Cfl7M(gne8>qFMR9d-Moa+4$h|=g<9_mgrW1 z&XMpswU^mBVNG4@0nV&w`K(Zxvj_{POeGK7e;gCM=+R#O*nYk=78SgR{U_(n{=mgY z;?xj-B&8%`iIAvP9<#_}WnuAZ4xqFxwx!UwtDbZ~#XW`nTBQI}{T*{0I)9#3T2uZ+ zA~mp(vAs8*hLh@Yxz@aW2MhGqUH^+1LsM7BO`#}8;|LoDBFifjo$2f>ST{YOZEqY* zSxH3&XDse>yQ>tg(Rb&0`k3S2Rfrkenn*MM3vvSMHXR^9O}V@&?BW&PvjJFlWv8kN z3JPzPix_#>gNoQk!87xlc692}T9dR;%6v4MjA4~f>VMQKOGr>rNfjMtWduk*;vxM( z|6*sHS6aFZ$(#ZuB;XprFU?ykYz26uONhv05QaCZg>?)uDqs!rAW<^2ce>s7UD%eAF@_3G8=LaJTB zufNa>#TtB`@BCH0f9@R7Of&w0H(T-0^R`79pZbsoPc->U zIVff#7+#E;fN}tP){NlKx={%9jTB_B;6oN_; z!=%#=&$!X;!w;PWWe}I&+oM@tA|;9J)+Q7tik`7`$AT^S*bm*q!M`X}^5R6cv2aRI zd;Pp<_7A#-iD?O;R?U|!C{cJ`rXV07AV|I%AeB15Dx!q(E$N{kC`PGB8i9;@CAs=P z3#UvT=kOCxZx~b2vGVRvG^TDT5-!s~rA9;0f2}Dts@;6*X^{8{?DgkC~nS*%1Ua zEoRD+MUxCi`%+qCj2iV~>IXl_faS=}x5vNo*wDIumeqckeEum_2K6#K8I1vH1kWaa z56yWua)kqfVg)qwCE*w+3vdt8Ijw^BJzi$bP6esX|CJEJK{tZ=WN#qc7j$1JaKI8~ zzTVyxMLi5scF{As7~0@XxLsZ^`$oMDo4u9Nf}kR;ja?O6>!Bd~Mc^UgG(Fvse4rhRj^ zp7E?zeRK(YB>NGFItJ6@3<3RQ&m<3{+-jUk56ZxpG&hz*7X=`u{9X{(EXs#1{qZiE z$LGU0vUYtqh3FKZqL6W5TB_`NvO%QN;Ve9=R3xV1ECwa2VQgodPQD*wx=gN=*SyA$ z4aDGcO8*vRmP8af9vAK*$m4hPd&wOSnt+@x?qzTnNeNVZN~ACP>6j?7kilis=l}W~ z{Lj(C1<8kYDvKYr+P0dUm8ZqjxCggEFaEeYZPkj?FMC0ZkAfX(Hk@tEi#WKX1~V=W z6w@f%cA%vmrtouw-JW8Pl!^Ei6HLETJu9sV8qFm zw{LC;ND5B#MF^Juf?;`FIXVgqL-q>}yGVieyTz#K*F)IO`BTg|Td!j_+sR>3n3_!| z=`G!U@hMCWloyr4{)rw(5{OD8RkZVv`mlsrR{NIqvq`CSN5uh3RhxxWm^iVmIY z7pas%Yn~y8@d)NhRgE*~gE!UxuU*Z#e^mO#<7TSDrKBl4R(@e)g@ zF1jb2l$(17W+6Yjw&f7N`~E$b^hBD2n~RpL2}Y%+;b&;9I-wCGcJVNmEu`~y`llE~ zI&%yCD~v*R278rhq6iv>gc!=~4TEQ0{V=MoU+rrff_OfCJJ%|eQWyx2W=A8`!`}3s z#~u8~DH?H>PBz^)4~Ndbw81KI%B1ne9Y^^liwvGWg_6c*-g?s!DxSY1gMr2;i`8#Zh870Ap2rOa*hxKrP zgdv6rk2B;WNQr%>sjdeNadAG6HNKd+zlz2-uiMYzFP)xj0eP+xwbA+Xrhf04l~hti zZrmtZQu$q=2| zBNxodEFtWD&P=bopR^A9!aOm-fFUy!hQ5+g83Pddd{@xps+z-+?=em~;_PQ=Oa;Fi zK5PtugjFKDNbD$3tuNFlMdFS2#AM0Dk-Y(n$MKPjICwbEioy@d35G2G%>lSnd#|LY zf?{;c&frPpvj|jzs**ea=PI@19OPguwujv#6lgk4u1=Su2nZyBnuIugmN}eNG8@P6 zyEU@+!S>k>CMkO~6U{ow-`10BM8*Wfl z%_kPKb@)WihLD7c&);dCWo59z81bo@u)!jqlo<$kR+jr-{=v(KN9|EkmW;&FarzgD z#k@Ls895j$S49=h>u}SPVV|G|BT~qwqp}a|PR-GtBDMwk+gKvDp?im=d@$jxS@!#q z^@$-@1n72&ulZrzoawEFLe0Ry_CIYhOO7%15A2UhWO7nTM3-SzqO0ppPgvvCr2%sK1G@mhO~`SdX{J|p)Sqs>KbHr#nNB3Xe;M)p zSzdub)F2EvL>;P`y{*$f{+8G*-`BKz!utO1N`X=QGd&~M_t4^-l3K*PP;}qW)@qm% zPi|oiTm+U)AYR2#eoQ1v{&`MsbJck5y&()1MA{g;EKJxZG*`4>td>=obbFuE`rU*W z8hMVSl+;qGS%*o!cipbkQLCI2Y1Mi~Dy&`2Zn%$2&;Bne{cQ~?P-I<8VNFam8ACAR z*X(EtOV2-O3|luMBSse&gxA4&hdW6hzSgp}Yc@n#Y-n-u<;GewSaOzRxagYQoTJO} zoXUHn9$(sn&tg4W1lK}Sr1tINm%%GV^i-qoOQaOT*?ah%kK}fEIgBOu>F?&-$UnV< zU(M7Mh7qRYmjF=GijC~$bnW%MeIy{N?sb?VZxk&Gf(_p=a_A0alt8mLheL-Xt1YeK&~+%fWAKqoZHrR>P9lV&~7e&j`Rn0&8ZazbFVOctN77jHaYe@BBX_zY8Q*nQw)A`Etv zKlm}BBTF&|CALdK*U1m=`H-KbbCDzQ#T0@1t`v@2E3yS|hl8f;e;GaI@|q)Ys@u!) zk4M}VaOu<9fwOYb!t{z{J5Rb%kbA+G;+GKgU&<^lQmA5F+CfPPeEoAPV&62FQ&~R1 z$?=)HP|AI6e`ka35IsYj!`!IGmt|P=wL^LrbSw_C{j<_J4aQhaoK)zFV zr%yZNT!kvB)sM;gMCyA%kK>b}h8##Q39OQ-e|dI& zw9tz25@Eq3{wUi0S`&YhGPgDF#hZ*$j-s6I_Xd4Qf@^NjRVTB8s6zA6mb%&b8f|~4 zzwK{}==~wVf~aKba($%m;|Xbh^~$fLpsM}|xn!<$8^(D+)`+Z|*EJH!2{!L^{4CLQ z6x zwSVS?ajB%JG~;eGnr`z7lS|C=N|1)lsI-s*P{bE!CL3!|1MC#%S;RbNtDX8@a$;M) zCf~k)h8JEZKq5uyIgcuDs5|hBYnMImdP6!eL+TmzW35V-uO5l(9 zKPv~W6oi?8;UvI7o_2l0?rfj0@6#I^KO`NhK0ZWt&`5oPK{?aS{ZaRc@h5TcjwZ*? z&Q@#&P53iiT3zu7tGrgY7Bq~VY&qA>G=!hIBgo6L7@qf;nTu`@W@qbmZ&`NL@@aQD z@tfQG$v^7&Ch1b`<2Lk|iniOaZ_1Uw(UA+9x(Pj#t@{v8g>)TSs1|(lXfVqb%uQN@ zCkBKk4!=KfR|I4zk9|&fFt+{#`crHtAUi#TJ-Ti1S3Ci4C-U9<2GKzAk|TwZapBl3 z%<8IHS_<^`c=Su8VCU#(O=FyMc}*%lFjU**<#$Y_wB=Mbuiz-eTHO0cCpp@3bZo@4 zGL<#rll&zmWvafB6;S&Kg=>m%ta39m^=(+z(s;gZtOc9lOx39OZW{|^W=rGb^6cIo z%PX59&Tyo@5t;Z!2o_Y>l{YDi(A6I4`)}1~-a(MPr#d{L2;ow}w!zxj3aV$hZ@CJ> z0m-{8_}J6T&@;aFlVVb@L`6LlnX7a*Z^RF(~ZWAY^&yz=*d>USqH<=$LlwIcWA3Gbh z#@h&SfU`alGNCQX`Zub`f_jJgb*AWq)YhHDR4iv`&yhnC_wo1m8!J}1YL-azM_I^R z^1R}F8gC)?MvVP-OWTBc)8|OU?sR#=gb@TF0XqW9fF!Kr{tH$1K$q=1Kj!z!dc{sd zvb9RE`}=Pd@2VMPA+XgNIsLtk!a2SMXV!NL%B%>a`xQ}f`Qnh$IA_bFt~2#O|KBa@dz0ALB&* zV&@ieYORM@)^Z5-&%!RPJ4il;=eA5ptbW{_ZE&zS{Vv;jzbM`A%OA~9e=yN_1t&8xNRX5_%+V4AkLjADS* zsY2ywJ*0rPa$Cwju8}q2r@~g!XIWxE=I%#NDOt*`Go1jNdZmFmbR=cW%r%0m^()`R z`&#xZYbPR9`E!HAI`#4vtBaaE9L~+F(Ym5We3n4`0$29J?8EEL$aJSpyUMtmXOP#N z10*TIlbl$0uSJe#UGBI%PEtLpeCz z*IIJN$;&P2N8*+wB5QeVv*(YaMDpr%Ivk{RKXSqn@>N_fNv{dVE+v>yMOl>66rQyOMvEPi=3ADQg*Fghcs{oxz2V5g)kIhto= zTY{uLhYZ1sCp0f{CnK!`L=g+uEU}r+k!&Or%BnBHQs6pWlwES|B?MErh@#kz0iEZh z&uBU#JidhZTL%IMA@|qsKow>@g}KqH1A+Tv!EK zUE^0{$!9gxx3UX9d=Xqn=yr+wH-6Y)?*wB*eP5jEGe*OL)@*(DQ zxi89Lm3H2ZGv%*{kHekyhh{+A<<-SO!%5HQ;MCu7&iJ2v z0}I`zA>xrhFWUJ^5{lJ@Ud{{(kG0GPD+|5$f7kl`o#E3|KBh&?I;tB+H+}#9I^3IC zhPo0?tVAGCWF+)cX2+R3b#^rr#I}#ee8EhuXUnu55507Vu{OT0Jp?Q49yMOU20o(} z>5AL!^vkoBOuL`$|C>5}Bx2=fOJVlLjjz%0d-7F;4Patfw1e$=!Jf#)_JiJFyn<}y zh0$3F#8ajZByZufo0Y|DZo3xBRcKJ=7)_)c+pubMp%L{ckj#SO{lfs{FD4pDbz1fk z-7emFu1N8_`hjF*#0Fi)31tw)I_)Mkq@8&2G0%$Mm&<$Xp>DlYg_gg0dh^TMIV&XS zqGJLw8%A{ZFO{pFk=ME?rRQi#uz^7+b7ZJ-z9C%mii*N@mBshb^7t@;3j*Ak+VF5D zJq8l*A%`7wFPPJ9qww9%#}JQ(_>8p7mZecT*;p<(P0-Y26g8I5*gE;A1gEi z?XtHe9Oa7{bB5RJh?c+UMh^CTE!tAvE?J}`LI_OdNe+3W&C+bhyrH}}SNktddhEY3 zWDPyi%D>w}H}JXX%?7$%2U+)0)oVau&&DqGct?IqmH_pup_>~8Nkd||ksFgEWB@&x zS!cjyTp{(P-~1TMach8~p~EOZfvsNAYwFNWKDPOny=VK)Px`5q+2{aq!R0qO0#%{P zzJMG_pxLzAm1`vnt5K{%mBq_$m`hY*^z8A^r}3UwLp(sfC(y` zi>t*4(n!?$DGH^34>R1?6ap}(MHi-$Hp`w52CcKosy`v2T!~#>*dh~e@YZsLZ(qG7 z-TZ4$pT=P>k*w0r)a8qMnCt{S_v3GLeWEx@FX38>}V>F51a;$RM5C?6V+$@s}Y!`80I6^TsGlyc~F+TDU3aqTG+@@F6 zamN`-dsyh{qYY-A2cSgwu~WV0Q2rxynaHyu{M0Bce8{=)m`h}a!+HKfL{?YYJe)mn zD_V&5!;?@O7T=^@N`!$YODwe`;LM<#kry_6W=bqbw_>*7nvTx=lOx{w{{D)V1CxSNYoDC&I9nZyxOH=Y`lOe9g9~T?$8e#iN^I^<~~I{dlpuG*rs} zV}53&paTqcnyWR9JGPVPh&=C!^j%1$CJqW-x;(4RkMG+_nk{!D#PG9YJEQx=*H(s zS<_LgZ9bHQIrG$!d9vVcTLUt!|CVL(p`JD~5&RdC++J7&uxTS$9|&4(D%?M_E~|L; z;C>duR%M2yoZMBe9hxP!-{rh@sn_757yYH#$8>wg>h}syzF9qsgD_eAYOzEAj*iyQ zAx>;e`QL3C*C_c8kv-MM(?Sj+)SF7#oFMgU!Tx^q^FR-@Km&1icR?Lrtl7RvGQUBH z*`r^LV_H8^`rZ-Q+2&Qx6ktW;T5r2Nt&I>qFvSWt53rKC9@?+#d45J(UoQ$n@f|7t z!p>``8<4lI30j=IDq1OzZv@Z@SFff|67aY&;$+FGmiw(lsoqv>+1mL7$kM%rzh0jd zyAb-K34^-WZ&z>fHLB`)G^AEVkHg)a{fQ!Ru2&&mlm~ak!pj(h+ML;~PcmX|_XNK4 zB49j-Ye^-O2zZPqoYn>&9@rxX=9JW*wfx|dkGhPDEXS8UH65ZIwrR=!T$tKZN@5$r0#KCxgwWF_+yJZ zp-K=L(z7C$^SKjn+WfS4g{~mYffD3eFf>F3*6zFc6RS}USsF*AE%6p**My|O;8eAT~fwWB?=xCRxj;&Rs- zoZ=!2X#`P4c9%%_(#WFJWo`;Y$#1?+reG$|-D9e8#afIG@F!`ooM@FBw+s%T4HvBD zEgg=& z{xm6Wthr8hr~Fm=(!-Vm?_FUyKE+$>u6PYT6^0pv(`iB}GbQipSKeK^QkqhlmvS@( zaEL&&8-|^ykC#rkJ-9I)KGgF2g=l21&A zS{_Jf1k-1l{?YJ^F>|xozqRmI^4d)%CJ~e!R?$$Che`Ifw7!$3hrw}caJeDIOcqt2 zT0XqfAQJL-&0Lo=GD-86?V8{B89X9psx)coMZc$ZDaZ zO)B)&YWRMbF|E}bbN_t8n;z1{aSaeX9}CQz<1vl09ccKX!KyID(yT#XtMYB^A^S|W z^or3`r^k!#Km*$t=tdMmwmE$CwiY3GZSfFoE6nt~$oxZkoWV16DHaJbSE^y8X zy9kl6e?@D6U>P1%bTQ>Xs$Qy>oHW)Y*Ny@y*Wk5}3w$R#D>ObvIa)wx3sdJe#RuCWzPI4V#1GEb8`d z7jkO}9H9Z@AK|Yp^MQ0Rzs`E>bMYl#N?8Cm1$$?*^)AI?&`%2WQlv$|Y3HyElv$6} z%c0svWRMnM`@*+OPw(MU*ZsPoABIOJ#dl|uISAMf29Ky%tsJ`^Zf+fh;g!V8$#s$q zYz|Mf$5`VbZA^(q6>x0EK3Lsz$#dONbSH(WksfIrCbYL#?YRob`wPJ=j;c(;3vm2z zX*>%fA#I{wwL2h&ezT|9%1WApnp0qYBh{<8(X3*u$HSi} z5h&da+=!HsU(Vt+-h#!curn2IgM9ffQ1pwDR&)u>NGl|X>fecUzwiWivRH ze7AcevsLLK5?_#Ev|j=*`-dEk{5ds{+~cX3Qaj=oRNnH1D4tbzH=55cv${VI=O@t~ zRvz}%v1_+_Wjk(K$9*~d!F?^CK->fp}4blzgUisV9aKcD@MKxf|Gusr=z&f*Xi$ zk)ji@)?02@mBZewmq|~bqYcLfsfqwCqWt4l&06jGVei+1X;T+>A2VhWv$xkBJPk$8 zouC>?yfRqS8AfAo7huU1xVNFC>m%*RpR^?>J@|a*fO{eIC#{Yn7I#?P$r9G>aYH(S z&lVTZ!~S{ip_JgI+Z_oveQjdMf+?T{d?k{tNK1LtuFbO)))S(U;4Lf~Vns$zaMWMJFvLfUnPeV|)!jWuFWLb%V% zZvt*ROv0M}vDqwaQ|suw9wLSo01rXsu^#{=|PEEmi+;TYUEAivwGv{(Yvd)H#7J zzYE&eSyY6mumQRZ?qH<-!HqR{otJ#7DkhRm!m8cA5C`vuE#j(nER%mTa(}ZMg5GkH z{zx3F%>FOVMt8J7@k+qGXLWp(82u8Av`t@SsfZEC2Rtz<*i2t-U($bJ)}~@%BMxjr z+3=8w=@y7<3 z=4*T28KU`72EW_sbYj?E-miZUq4-Sqvp?msze9Ot98$z9I+RDt_{Ms1JzEhZF*uv2 zYw;+Es_83>tb`KvfX-+^(f9XA1qw(0=urfJgYURT((~i^U8q`cLGZ}i(lTwR_7iZt zKp)W{PENx;^~cT&xqqQLA4tq@tIaoZV=IdAG?GHr&3WlO8lZe+@Uozr|Dy>JYcwr7 zb=a>#|H0VM3VGO0#Y&(`&jXy&-f`l#HT*;2ZLyOhnOW*-G%e?Wf|Ovh<{=9z&Fk<` z!o66cVZh$})oyyPVEJ2}Jv_FyEP@wCs8dX*yXNo+=*{p&zT9Uy$8KejI>Uxit2oM7 z&6)F{CSBGdMJ39k=OQVnaDIRHq#(h=-IBdKt3=Uu4dZEXdh$|S6tA8-8-bu$ks$?% zS|OB0Q+8Q0sd#gyLQc+cnX18T8SQ|?&Gcr+goD|5D96e3av>FTr@by1`c?0H-j9lD zy3EzboN%LUx25ZGzRq^*B$}4=^`|5}E9P#pmY%+wmFXK>cG!F3&DnRq{kkYbnz4z% zfVMT3u16#k&HHUlB|!HXd)$*r1BSgXf5Na$-W@a<%2o*xB3C=~1`j02DCNnq{0|q7 z>yiUsF{qB;lNIkv9YonhdpTkOO_Nj66|7}3Vq>a{7hCuL=F}$Gow#EVT%EI8_!xel zMS!ieMjjX*z{Dk<2np9w&-t0NKPUO~C`pmB4RE_!zm*=dQ{>q77aY^+mh6S|C9Uqs z4Ii6@3~)Dji>JLBvpM8yut#EglfxA=&9K+Iyh6So@_ZAr;argIf@BJ=HRh59?hJsk zopp%*90g}Q=GWGbI-chPMN>0!^_Cwm$^PzMVw%A)EfAcSHY)|G@e z>lVXWsAUxZNE^?$0}L*&JXC2z?c2kQFe#(|7WMWwEloC|f(WS5mBnu%3b**=J7e4zEgpQf?XVOVhiheyf ziCt3pVcFGFp#q9^-sAT)Lw(qqGr2{x^>qOCKxY$RIlS|ZMszrOcZAW2e&HeY2_^k! zjV0Zw^LrG~E|oj}s?B=;-Y`c4GOl)A!}buGbEN&46j9bs-`=sAuz2z{618V^O_xy} zM>A%F2!G22I;jJCD{96A-?zI;ZO+7igZSw~Jb|9#Z&DsJiLR!E(@|veJlD=leFR1l zi&W~_Jk2S(LQ}75Zub|uj5&6#d&ZA3Yt1MJ_f5**THI;w+QyYCTp8239-}^KWU_Xe zy0&n5d7Dq;WHMY4Wk|IASwFk&5G{tS`Y&P^ZWJx@LrRlqh&vWY<8&B1`j_B=K`%yk zAP)A-`mtK@I);C?(TPFYa|P4K1Wq~mReE>yd4tqK(CsUe!P1Dwk#tkRul}7SYO#91 zTb?^jZj-^N7AZb8uZ2mAcQD3xU_LYmkT6^*G)X-02#LC#(z>^Ubax%)$l`HS`cJOw1el)Bk(jbNW~jEtkB;UJDjw#c@F&i=e&GP zM%!)FlmGQ+maUJxyWb<#U@$S(B;bI2W3gVQV}U1ztuFsC@>F^0(zpq5YC1Qr1mlVy z$)NiRtw$9+%GY=PI{Bjb`bbwv+i);ZP&iN4T?S5hz@bQc)M2mBAZWcmBwRsFlgzqg zmTsrGuZZz}0;l|ZOXc~Ucb)&O%MTEJSgQfm{VE+ha?a0P5*?jz)qwBlTN1(5Wm6q)CGR* zz8;yg!B5~%KB#%@GVh_wE}JW!>jZJ*6!Y2s%Mf1G)hYuRek@4ek0+Vhz@KY}Z@~t( ze;+RHVQi5EjkBf3v9Q-4+V_j$_T?ajuz6a1+WdD@pnCI>401o#s`hnk1eDAzrQz~n zb?mnE7xnOU-B%0biyi+Q9`vlxq1*D^`1HXyGPQ5qx$MvNPxTHe*BlUE)*%nZEAx-R2=TCX`=H5HRK>b;fe?=Ie)L(8Y6`7g znEXj{Bj5=?q5Et~_|Ua7ZS`X;Zu5cX0?J#0hH|pPQ+nvhGuUwFYrWb-rmCC}b&U^< z*CO+t-SPGzcYL{qvgvIPCv{3&p9}a`YnKDt`tVuN)eLl0ua>r`y?e*_rm}z^dCVvA zbK1j~a*@11orCXqVzY5V(12>ZKb{&`VOUewvq5!?TRy_0FQjhr0;zKJYSEddeCKKp z(dgODSg(1*f=eR59Do=QT!{U{lWZWjCs^-9_dA~hi59mOGORLaQjk`!23l0(De;O5 zar7hvW%P25r!5?!ys%ADJ-o1zu@n4{*X@=t=c~31G*mB4GQHn#g?FF^_7b#t>_XUu9bVRj#7W>>Vs{9;R~vr#{{_#-C5RJ} zr#6lDQ9NUy1vl$!RAh-34rdK_mb?PIJeLYE8Sn&L(E;nKY%kX@%r-f6a?mK7E#YTX zNmkF}53+aAP${#gCpX=nO*mKkM|lq0V4-0*eFgl)yCF7K0h6^S8&+xrZK2ix-%aAY zxfdV@)Bf!=MrEj3nm{8Q*{^Oh!_e5en2w>R!Rw85e%Wgu535q#7?l7waMx z9E6^gySw}(j>&FyN@!izQrCAA?2`Dj2b14V5e}U3Peb|YibF{`U|?|`5%_D&Gk&ko zy|15KY6eo*=+rkqimzkMp@_~(i7#8%*xWxv9=}A1q@78q+wksyp_sQ#nZCTUWBd%( zRMfGC*{&Pq;ps4B{3mxA^Yjgb5f%|a&c}p~i6nFSFUz5pH6=I`4O7@XpRQUyW;)cN z@H!MKa(liPP*tQJP(+ykZl}t^A`y32sqA!^Y9M?r(S>z(Pz;iw-Zr<|y2uAyrQXCg zNN(+xQZUW_E{dj@l6Os&LG@xj<+vaEhD=E{fQFMD)>VPY#eAw`C$)f%haRy3#-rhf zwB*rj+qBu_)37q7UzC0W-RK+a{*DYJIsn&hTR{=}(-%G`NoYMRurai9qXm_QP2#sE z5LYhJ*PWNQO&;g{kFy8KSXG*_?O<6oWlRjC0G>K0en}<(dGAVux5@FvvZRT9gq#KN z{Pt+-MOB=~@rX9oXjhMKfmUxgj0PRVMK0@5u7Zii2vMO>as5Q4)kPn!sH#~UjR9IX z1q&wK$kg=6(h2Z#1yv=i)>C$FT%Voo&0J3qu}2Cq>kiU)a2v!4sy(K^?A@d%jRT|ZCIM?t0^wmMLqq*H*4m02 zXP2VSg)TChtjtt)T*?>)t$!x)Xn~&3@fAVhezg2C;=`CY#CS*L0{=4; zZ_Tbk_fJfx)WxU24>6tcYt9YUds)VOmBIy>?gm1%`)b@!nXrxqZ{CtL){6vFBK`Vr zSSLqqlVv-nVBp~RzxP#-fwCV{@B)V>w@&x~lp%UPo|VkkG_HfIOrH%t+6p3?%)Lc6 zJ`}=iXk@Xg?kj0z3>(Zo*a*tkP-Bmt9mkC|g!ea*UeIzt zZ;PCtL<=k)fe6->jb6-GJ>7*Mw;+b_*~IL-U?6D2`2qtW9N1W`!**?lgpZf;2ekQi zu#3?~r#2(wm2da`vaGPer@zXOM7cvY=CDSY{m8Jb)$jBDwX^YH!z4K}>`jQVb30l< z0Qny4NY3k1!!NZIaidiyZ$}zaoeAK(fseU%1<#o(4jrySHqU~;Tr<(KU=ijrA>)3y z#mVqX?D@I(K>G47ZJHpFUuw;^)2%KGc+O|Fy-0{BesF+_&86Q!bDrK`L4Mb|Io==i z6j(Xd^sMmUFwG0wTpH39y$^R!gqqngIk*~Yp;t2j_xK8EM4|?I4oH!Mbh^Wz-`UlD{zfLvh3*n| zrdTwT*uQ9!+h(^}tWBkuHjV9IZNJwnuTPuC#&&9hP_C(qP8Sk|0iJ>WMk!|wJI9~f zIcP%zs~nnLCrI^T_lyO7S7VgP?Nlw3$3lm^cFnMm(~60~88CNQU8BKTv6rv;7^cNT zX;I1XAGF&D29otPruWcZlK!cm^5ca5#&cFTkH($g~IeQD3Na3RG# z*M&kYB*C*q2E5;+9;65Fs}gw5CSja`qu<~D*?HKCbzK2S_C$ZldXqP_5Ej_By(C^< zf?tZ6uM~(rzCSB0)xLky5n@nK#r+qm7sX@&IoU*w(4RbO@P1Pyi#V9d_qhLa!t4*F z2VRV~zD22*8iDnk9{-M~1=VIu+}cb?Tr+F1bW=FI2|uXN2UggyxhYf*x7-R?GHT1$ zD6#Nj0-sEO(4O39rwk8YdE%R8RkY{)SdkQhkI~4n9K3Hiuzn6_qGz5Y58<1&3trXB4*|jhx&$MgQ5UD z{mQu?vLl-hJ{>qEraF)t3-s*hZt7vl5oVSpV$}%$^;OU~ItVj>=W3PO_X$GU3rpjO z^%AzDQSCtA%<`GfPZ%7$snH2hs}_jpW!0lw;W!bis?Sy*STnl~u*h_=m?&-Lw6Evd zU4B&Cm>j+UWYMKky$<^nF|`o+Jz}EaQ?=x;XR$3MI?W4}wUD3@68DGr;9fX8<;u6c z;E|FUWCzN0e$E!F-=CrK&~En~3@~=6lR0En_zaE}O%Gh)Kq}q7~9e9H(6QTr)sEp zu%RWW+UO^E(E|gIViS!dSZq`w3|wEK=3$(>897_-c<#{pQsCs$xIcIGWzS{qJ^0*) z!q6tFUgx-83dzr=R_=WyPXnstNJ0Yhf11}@!4hkV0do*Qs|33 zegv-{dt8^9?T)#XToF0%eyFJo5__8oqbfzA51$kYE**`_=%{1=ehtID2O1%8-f%;O zHj~0j(c#J)o{l8a-3waVA+7A82lw|P zA*J9CnSR#cnzdcO_-b4{~6*!+>~*fyrS|k=y}ZbsP*)N-AXsQ1c%Y zZcd^fbQ%{m!t?h_mwD2Vm#$AXCUf!MM2#V3qt=DJ>f~Nl$IFp843CaBc&+!Kq^6!J zcVZ^YVjI3o134EmanNWnI2t?jjjscJrKk1z6N+bld0kuN?CvK0TTN_tGNa0Gh_6j88g&#mUXi9v^C4#ChUT-!T$Bf*UG0_bg*h4Y_&C zFJlxUClBcMdB(uS9fs!Oj-+#5H|i=quMb}0#s1cI}SG6tcF0~S|O4{1x%JV zT%Vu5fp;^Rx7uTWDi zSD{11Ws-%8;TZ$pFZxkozI<_js+qps_q@k*S}ol7eAYn(n6v>sBPOsj*uR5m${Gd+wMMacb4DvH16=k-NVD-d_xcso1Su$c{mD>;$AF5 zLiQLWCiO)0Qb-BazT<|L&^v(6@oJ9{QhaoHC|Mv8EygW>e5F8G1^S)nrv!k?m&y>^ z#sk2g3;s4Jx7g~;MyQS|2bE<1{u=?6SL2XLVWMJXMQ31O@F3Jo@1O|R@>Y_BT8kfh z9v#|(`r4nM)%P43#E(bg0ZMKKH}6?lSHnTiZUu8t*owQv^gCr_4xX*HfVk9aSJZ2C`36g*O7R13lx^`hH3$i zudiDzROVUEm!}$oioO`?7S)T52|U7=OlKBDWs9zG6R0DT=yYJ&MuVp)=T(w9EWZ7} z>c0A|=`Vg;Q9(euyE{jBNykvSyAcqWbcldRcXxM;?$I4GknSGc9nU`BC;o?LKc2Je z?0WCicE9dOw7tNR{}XN96NEgLA*gQjgHlvtadDxLifk)Oh-RQMb$s09>>`4-H%Z1(1sGi01znDK zeF*zweNUL4L&HTMP_r*!#{E@HF`gLi9?fVy4!4yF4Gxwewv2IBW!cHBOr&E+=Mz}e zGqtx22oBb@^6cbfkIgUFN}zG7&{irb?izi0Z|x+qsU^WUbsh@09;>#L!4{Qbr z|M?jsPivZ?_FB*7yuz9@eoRHf*dTgHua~25+~^ z?l|A=7x+Yk?wxFX*Hyj^q~3n)VX(Xyt~`8&%3)tchEN?nJpNveR~JY|`rzsnGyc!$ zVrF;sp;pTI;onbD8$Mfbu3p!8Tt^< zc}aQurTs_ae6!Qoy@6lVRNI zl+o;x-Aix+Z3Qy5FO#Xew%&^IsnC)U5|1COSeF=aVeI&{OW%%r8)wyvpKTrwx`em- zc5rzVsbd#iH+@2hHocEhpJ7c*zWC4~HXjmOzne0 zUKDAP7?4Sl^f(#WYh7f|T>0`J77j1|*yxm+w2CMb8A8=q9`1G?pMKnnksT)Y-;47B zn7HY3H0Dz7q-T!><MKI9(TbzJsHuvU8IoTe}6%KFIk>dWv1yH-<5T z32;A{r|y-jX@0{9<5nJ7@BJqS_GLfi;s;A`-Aj!TJ~f-A?%5^sg;(pB>h|bnDq`{A z2rpS!uHB%5zavu6RL9p~j9LOLuv0qFuyR-G__sZ7CHu963MGzRCr?Jzo1~ z0#Z=I0VTb>G(9Egl*&&;s2I-x=_yrW?ym26|AU0PBj*%XG^hDUH~lFH;*;mLwC(u&sr}HSTWKUu3BuL*h0=3_iqgM$0 zq&^;^N}c+8X?$h-Foh(@-mw)Vj*%q|Ez=stxS*o#rHzYarXEk6Z+@j#@DgPcXUg?F zt(l@@tBkz)kN%jQP#}TMPh*N*te}JdEy53+}s|2G40@yZrxDAhYEBYZOEU`{eEWVviS3 z`~1JzZ^#O-bL=nSYjZIbG-tDdCk)MM^(IC~JfvZ8={<+_>LCP9#-k#5I^BqC`sBG> zPsWcIhkt)3gz!H~WZ5CPK&m8H|8FLHFz-IdO(7sEp=2t?>z^;DTS#$t&Y%gW!Zqtm zK?=hY&xz8mNYya(KM}bpLr_dTR@~V=)0OmlgUzN${TA|JwGnU;`sG(4ZLi$|Nk3h9(C!si;f!zf z)d*Y@H)F_uZxcur`>wpW*6P%96NKr0i`Z6$_$B9?W>~XQdcODB`D^RnB3nR2i|DUz z%x*`B!VwCy!kV*jEDc`zhEm)rXCsjxoVYD!&J(;6`9^kw=|A*K4cBUY_?VkDRWu$| z((6z7M$a(LvNNN6=4O^odiwghTKwu-LtaUEWF9v&hT{4~lqKsTuH@mVxBA5RNr%ky z_Pm-NT8d=k*ES-x$#{)|#)|{-NH`i7c|?X(pbezQ0Xc}*F?`F{Sd-*oj}M;#VHRlv z;oNp63Y;yoZFfy2iFdD00rct^)2>fui;2ktI^#9E0tohs{G;|B=~B0nD!)dSz;2uuC(R*ht3}; z@o53^|9#_dHFUnDYS+Z@3{g||%k`W>_fLPv_# z{?*>(k2MX&2B|LZ9mz)WVixo09QrckF%%#g&kWjxOAwmJ+H0%nef;L7)X!=nO~99l zRXKKz3F`r4VGNwae9rL$O@?lNamaFGp>D69hoG+fiuC)e$IN4Env!!*C6w0G7($%B z(99)4mvb!SS*>jr^$^uj+%ErDpQP%=k*IvIhSOXO0?@N`x)pinvNiT>o4D=vxts2l zG48lly;P5_EO{(4v1MkufPsErNUrI%8#XvKkHYWUxryJ!+#_?-oIvIlcsBG-8pqd=EI1S>nD}s>1!QuzkegO2q9c z7=0u%d}_9?;KBNKuG&=pm_%y=cV%TjG5iw~Eag(EqeIGDp2zmQPPeQpkCek zS5s8Zk{AZxSh_r1&kvm@wbpuoTJDI-ax4RTGq8>f1QM`Fs@2Q%@Y-3aKXN8)r%yzB z*54voO{`3;y$GTFV^cW!)^D@agi6;Ey0)Eb@NrZzR_z0Fhj(20Tl{(wk?b2@*F4mg zzV=*S-5&?YtDf!PnGe{wgyWT6HePH(^sQ}?i4m%k@lS+{K^mK;9K2$73*2iiV+O)oBqKO zVtsx4O%BIgmF!cnJr5!TNMY`f)wT0HO0?|2oz0;SOvV-}x^e2=otI_Jn#!b}z&Ch2 zWO%?Jj;;b>zyP6R5L<*;l4v=utWs}?uj3KP729}Uyii>YZmY* zw0Q@cq2(WeoJ)YT0UGyEp}V z0=Z41&g^dE+nv_ESHc+x+CRme?ujuC@*wL%FHTw!r!fzCfXSgYEf0!o?{f zW&*lG9L2_|oWI>45Ko=>Id{ty=aocrrn;X58i`yf{Hfvdn}S263uW`?vb?@XonhIG znt_c?lk6<%L9?yeCNCs2Q+@y#osy7Og7fcq35|T%Ey0GwshexPNxJO zL!$d$QI({>)&Rnt#(?azdtme0x9uQ7aKTXVn3ivGft>n0({ER#*|XaaAqua2&Iq0^wmV zuKjsTO4=C33HGGrFT8ESSvV}eFUN1SVXZ#IKU@VnczS0Crcz7F#i!eL1Qbm zLfEv8)XBOxF|2LnJ}B1Gb%$TsqBfQcekZ8yzvjLxRvaffVWeNRkxA7|26TN;aL? z4Na)$PUMgEZ~ktWhVnL$*hIH?f8G=1r!l;b-chpjezLBpWUrHF7s!R&axDxtVB`!dXDl*Jub_g>Y4HL zpVM-IXQdj5+DjHESvt{9hn_Qf%^5}w9fBPo!sp_Zg4f0!9=7%0Vp@9sYjL3jN??=K z?_w8jac#5l*fbtbl;lnAx&oq2Xk=Q5oHnzvomEFs?9@Mv3DC{^E@BW{Zq+%fcvB?FHc&?0QuOXDaJKv z6nEtk&xuD;cUut4tt$C$V=Be;o=R?26IrZ(MZxV5B^UF*d^cpL1K(A|=v+5P@c-ok z$Uy+CChWr#4J9wR{QXes7C(OSIXh7z@jRlkbqAjXU*b7^bxm{AEej(Bh;AGefp6hSf1bvLqbTK z*xivkpWh(Q7b20SIn*vAN8%h7DtXAXNc%H4a#T#=YcbGw2#m&})4nG{EXRMqZx`jh zsCzS*Xu17!lF9VykL#nqS$}7IUqOI=BK@a*XjWL(&4cgp_WWUmUVYH#z0-~L=`e+@ z)(r=zsHdqPek%>Zq73YL@?8BrMItIM(}_1KzBNq%YF^meN4{#)t$<6Lqh*^rT?U`6 z=oZTSyPkZ#dsd!_!NAtRhr+rRc!VBK+g$Ie6e2U-p1+aAUm5QKUs$y2 zR525Iz1;^YxkgT>e}3eqGQrV$7p3|lBtY4z<57hf7Zs|bK8}j{#$*zV#QDVYe0^_! zVl9q<(y@;!UOe7>ta~B8dw=IOcSiw%_w%E_{?;MQH{0`TJ23=~pu0noe9k?&neXQV z>4R%V2X$IE<)reUjC%RVz6Wh}PJ?31ZW+pZ#K3zXEQKVfKMUmecjWT||BwPsLWX#2 zMvZUN#pxVcg6L- zxey3_Re0Uo5m^zc)Or<%K?Wu*V!f8DW*TRX!td>0VI8kF)^G7JsSPD0UR1cf{0NCm zpOh~)2L;#a#=)8W#-eKxT&~}hp18RtL^LU5H8ss_8s`yhD&&YZlKWq6;^ZAvI{H3qz|8bg1|1)w=eIEZ65=3jIN-GQ(~&C zuyM3jq*Rtf>lmV({^*#`M(`OHwc$tM9S5H{t;f5H^(BwTcz2Xozw)#2WXMnWu>4ZU zcmPwX_iKLgdb5uamN&R8hDk1kWZ4EnIcUQ2)n8qi7M%H}g*C)O=GgrcJ2P?5sVqA3wXs0dDVoi5 zkhz!_K8d)cK8fMxlL>ErPd<^gq0n)1^U|LKQQQ&_&UfY|>&s8W6G7_###h=Cgm}bH z$4^{>pXzVZ4p3qz$aOM-!>cVc$csPT7NTf4gAJmSwl+^>kV%Hw)FSYWBTVNBD9#XZ z`gY9T!R)T0Lot&L>S}t!YPgElqJ{pALKfpn`h#1IJgU z#Q`Px;>8-gsdY|B9c8T|H0?szG#Ff0ft{qiQJZw%hQ3%(sy60J&WS~QI{F!HNKcV4 zg>|%CpV2^ai^IgsWU z$XjZoQbDhoH#L_5gC(7)A1>3|gg2%{^KcR#z8OpnYE5}B5P3zV$;gQ_tyB=9PxLb# zm|de+(i(NT>ZLi_Xedg3t~&pyZFk>l?ilAuGP~pfU&&}c41Z_Pu*h=x-RqJUm3a7f zN%?&$30a6&c8`;%F!}y`p5jKy6e-lE3>E11{?lv?GRM^#<)cPqh~=+ z*1+Rq_mrZDFN->~^UY0%D`FRmQfMLwU1A3IM}#weKs^eZ)0)QDPWaIEdq}XsXIn!Q zYqMrwVU%#SRgH6(L5*^%mlGAKQ<>O;f2PJ2xI4ZbHGtRvEtRKd6Dd5cyM+2ZzkR&C z?Ss8h3uJ5QA&h<9^*rF2tMIUC8K6`T9Sl(X9u&fg|7wcC)g zU8`-jR8a&m0SwU52PY~K_?X;3c3xsej-^36Pd9es+zCoBVWek(bm~&*&Eik7AWfKJ z>7lS-j80&oxJseg>~+4{gGz_II75{X?jHY?)n8B;$Y^YqL!5qh0RN#W`?vGb)EMf~ zuaHcISv!LeMYfh<%K~YN2f0{a6zbkU;&*IKV&$Xob@fJ+n>6nXQQtrPTe~sqbAfMH z4%T-y(iAmC!Sb3HXE$g)=-FgjAu-$L_&9&+)iq&qJF?db;1~x!uzJ z1-aaH`3c&B?P0={EIE{v@V&TY&TelRdS$Au^)2&Hb{#J))RdKcF}1RGQit1}b|+KC z7~9sNH4aCg;Bw{QdO0rLBoiH_kPHp+)^s}u{Z2>ZqN)_*;&iv^ z+V*uT9Ts&_hlk!y$|FX@$|0~K5%ri*K2;YQXJa4qzsL9*|OKF}2 z&D98!gCNaB#DPl1Zz~9AqP#z^v!amvFip>(a`00xz{9LQ| z**qNEL6!Rx9V@Oqpq4li{2ZQwSsw^$!xqpf$aQtE>D~C^`zR~4jlo{S zZbL6l+8PB;C9<{ETW()ElZ3H+Te%=`C%66XTTROzrAfr+Epoh^I7T`ZLR0m5UIE@Ru<6+L45%7Vuk^Q*LHnrAW4u-#dy zyprPq(F=u1Xjr=U?q7E(FwMU$6`&#_cz<^QySexm9~$QoD6(0F}EE( zF0UTxw0pfeejCo|Br^ZdCKaW!`L+iVzXux9)JoKgAjS&CSz41B3*rQK565UxjFN-$ zkFgUhE-hsYp;zB!Ia-ulUlAYPgbqP~uDelb?CREBIktEe%0~0?Ctrh0w#wlJO}vxH zNA8;5M}ZvL?RB5d6_-@2Eq<<+V{Z|m#uPW>>f)n4n)}*Z468Efs_e+VazEcy4(x0u zXjP!@^il|gm8!{7V6Ac*Z_;d{l35Z9iIK4>6;!Z`PdGNo4E^`5#c(KY+C#LZPWdh8 z5759gYi#zcqZCXl9^Q(e-Q18=nzA3y3cxPBWa^s4BT z%l_JHquV6OS8A zmNfcp(`l*w0ioaBNnvFQMU4l%u(s&N%8(RoGKtHW++s1N11%|+mBoOl`B^CGomu9I!t*3)(e_>+!l*Q(T+6NTgIL;}~W zWV@3E>WQ0-`8aK7DRwxIQLGWM$Phx{EYQ^piED8?q85uidc21Kjhju~%8 zhbX*6&%jrZD8=O$8ufyAyRV^gY{o}p78bOFt_;*!wJJ#5uF4oA1WmHH%IovLPId%2 z^F_BXbh#YHz0#7wT_4HHQl{VEkPcYh`aRW@yep=6+iBy@8e8NEi8dI!vYa8Ziy7ur z_-N`P!GUf={C9#W;|CSGavEQnYPq+WkwjIB$j@^%Joo~VICqk1C9pRqsd4zHQ*-5=dC@+ z)3YrBFU>aIUmtcm8gdt@oJ=Bh_JiXr(Nn4&{gKc}dsCL$Xa+@*>O6|X3o8q}^fX|0 z5#uu%x^QZ=t9got4VH?MMI~Prs>_kYkrOve*jdPy9N4RMH zX;`Jx(m_Jhq7?is8#dWDomFALmnl?ud}Xd)B#*JKjD<1cEo4^kH5L=G8}!p5q@YY`(55U-5hyzQ_w)fL|c5w*)$Vd zq)fvL_?>O#)4hAOTan65Zd{yvTQH4tTKnC^-md}HeT2N?9Pd%3?rdWu{%Zo){N}f% z&ruqI@xv{q3`1(3(e&nbhJ#*d*q`b>5Kp~zU@M6PvuL@OaVD}K9C9Zg`QB3)%5`1I z^ra^4#Q*+byHZ5P>nqB+_3wDDL9j0-Eg$e=#_S651aR&-A$-rmf$bXTkq@N=4=al{ z{wboPXhTyMXyA(3aP7JGy471eh=PEKsdrX&5s-dtss)$oIulM(yd8N9g>M^V#mS_v zShe2x9q;%zmdtS-==iJIBhTW~Q<|86QHfVseve1dAr#*_A?H(~NOTBIYfks)wB7#* zEETtyN-7Nko=E)N*&JJ}36LdUAgg*PPUNvM4@8FJYd=DI&a1wL45;Wq8)ZZd*v4zo zNaKNOK`*Co^rOkQj4TioWrUhIG9?VJQD?`~r9JluJndC4@^K>UmJ@pi3QM*6xktH6 zX&!E59PO7=>l`t%lW?e?vD2|}OIhbV!`RWv*A1aeP2ap#c8t+Ur`!A-$t*3h*_W%^ zeny%vZD4{=hjZ$3($VU~uC1$Eky&n|d-+)wHH)Lnc5)mmqMuUe^jmB8>clt_J--%U zEY=s+o!fT4@6DlN?%kA?%)4i<_aB3@$t6 z=#xlBTe_{A?qJpj_3P6q0glxbHvfTJ!k_ltp|YZGhiEZrr<(wwk`GY#20d0J#E z1rsJx<8eDoLdyu<*MVRsS+!*MwcjZk9=zjICLg=|mt5oKKCmd=>TVDXvpzFBhf zPi^+S-|z55XTAV)XqLT@|NCpJt|G<(_C@8?x&V;AOJG19A7`yD?As>Fi*7-olX4Ws z-oP~r=?XYXMXtAG%9434@>{6xaz8;{Tf?$oV;mRxWn!g}s37mg=}j`9mJ*jFkzK zSHFFsD%0b+N-*R#Lf-w>;xXk!S==ay$$ocwr0F9U4{gYEPx1@SpHjgjc;@N3z6nNA zwu{*aM!3z6Wj;qdwRRqNQ{Tb4Shk;PD{FZXnzbCra+f_za@u9$1NKaeH>*(Aiy1On#EZ!~%c9dZ>DcW`>-QQRj-+uS#eQnFI263FW?W@53j-bDte=8d?_X+v zsfvbMT%5Hef=EtI)4G3_%H2;c|9j7K+dn2B!n{EoE{kSz+$;O-&J?#33_*^ac>BYM zRjr1)l7{I>AmAA>4hkX;AhS2Sy!$IJ%hUEM9NX{jSz|G+EXHaZ_*A&>_}7xQ#@WD| zo`TnWWJHCB>m`$;HG-zY=uI62Ch5r#KGp{mVzXsJfkv`U(UJSffSSVQheB+|GQK<4 z(;5;@j8u1;cpIo|osi0$-zh0OuBAUxsH{Wc#qv!1zSF`IR|3*Z$A!`TliYVXS- zFBtY}`l1Zb$qTJS+~Km=>~nKF{iKPs5=pC_f~Nx4PX zRWn6A5hob+oD^H--m*$Z}m&7t`_hTdn$hU*s%C%LuXi2xPvzLqUyp8dISD|qCvNa%^9oZ^`q z0+KRSu9fkwGP$H@@>83cOLQ=NdzdDf$7)@k^-O+xej?F;n>+mNq$iqFt+nbFnXnlJ zxc9!0RuuT>b&#$4LGuxkfji>xrCN+THGNfNyuhTIp3GYN6NJ1o37h@j1mj-%PU&=g`zX?JUrk1Spd^G z;6zlce`z7%503Es*^Xa(jn&ebU| z7zEo`d4G%V(d8+?VKE!!Zk8ii&ImVo-2Z4^OrCqQAA41?+jIT7O&1ITF#V9VYH2HE zyjr;ON@{9g$rr0j%gS&1QtGLiHhbGGNRt+G)>g3e&vJd8UO-fkCMzUrq>Nfx=yZN3 z&q@Stj@KKM6KE5*NF7gPYEjVLUx}Z64g1{o;5V;34I}h~m(hYRZTf@TOXh6(Am$q^1`3CX8nBM33xM5O#;iM^s3>_}lPkwZ4*X0T2`h$S)hKzwltofgVKLIO@ zfq$z4mm{^!Pc~)dvS{`fMlkHLjaE97v1}D?1!^6|%K6Btq|oShqh{>*e*QGg-puQS zv&N=%t`G6XNY|{7Dv;~1<*i>_4gP(C!AHoNT`wxF9c zN+0QX5Ewr8iFByJ#duE;uWCMi;w?p8SV@BOQO3W(M68BXVP76R!|ch97;@)`uf{+* zBUeIHS>DeCt_fha->w4vAN7S{KB2_w)6_FI%K=6mLh6MH9b#R|o0AKH_B!p(4E#OH z0RFjkvptoD8$;W*DnQmEcf>JikUAtZ0;ZO^cR5}9r}GJ^JekdMF!-a!0DVIBLTv13 zZ?%ScQ5$HppU*pERYO_nI6=JhPup!j?MQVSf+E}4bL*T3x`&ZeL&^=fpMyN(5zgF# zBKl$oJcP5XjLslr_B!C_H>Lo)vFULpwJN|n#GAZ+hC>x2%qip1HYw;KJ6CBAgAH`>!BABPB>}A@#MH@3aCTwgG-CI9gB$H+w1AE~g9(5+SG%pNg6PIXy94eotXMRbNt41iujId5U#O-$I=!Xbq( zWnggfBEM98mZDkQFHj<4YB1gnpPP>S>A!4B51Ge@!UXgmY1qLAl4Y_X%2r{Cm1KNL zyM#ox3SVidRDqJ#-+)+hNUWBv$={}6GX>1JjB(ul{9H;bM-Im|9{r~>VIrz=gZW(G z(aSJ-mDboy@)VkZySfU&*&(!Q9^~-k|Yx z6$QzYm=t&R(j&+Eg$Pf+5jXr(|JLoG%_Crn_p2Y37(|(qyK%Qgynj!N* zJ1;|jLai8LpJ`>Y=FPwyz$RDqH`jTlm0Dt7c)M9cJCVx0IA zTAL+g#D?deaTBK#&t`(h(V`52p-PHV(XmOp!8HE}2?v?bv9;Mb!kf^C2%NbWf%T+58v1dj9%h9w^)haq><=K14XF05Y-C zyOVH`iyfl9-!m$NtN*^a*4lKy$VVR^A=y#R`Rs_zi@*AJU59BUUtvzUt~gn~B^yPV zS2CvW3p(ZZ7cE*y2KvS!@CSf@oPFz`ut^__*!flDN1#E+C;^)toIU;GNOH+>=M||n zSSxDHsNNGx&)e?V>ummkLLey@dUiQXQcykvDm5lr2ruP&{gC;?^HZ-V&moJ)($BM^x8$|Te;z0 z?wVV~ma#+xQOZuiQJ7BmfjoL_NRz?vR3X)-0l#??Mhd!=>L5|GQ#iqvzceg8eB;Al zhb1%K{Gs^{)6?COOj#0Jm2qEtBzUXgPd(3LGd6ku%QV03eE`O(Cq7|KER$fFDMZT>$d@cHNv?$Mw|LQ;}_e zC!bBBO0l!TyySAp+pl)5VVQ%~@kzP6b*-mFS3%pyoXoFIi4XhQwk(`L$vwox>tWB; zflEDUJud0;f6iBG0>w_td((@Z4*};6V^XV#CBe^`P!ypnNz%3`<2ku?{t6>R?svCt z7A3r-Eto|FhxiRXS3W+|sevfM9ILap3Xgy1P6ze_`)S2ys}C&Cd=hGsqS741e00U{ znktUN1Lwm$^>KY*9cs#b8>mg!?FmsM9pmv-)hY#a<%PPNrS`XXmk+*A?cwUvb7=Z3 zuF95Nfrbru#7UNyRLl*(x9dN#FGtLrf;E`bGgQkGW|1_XNyu%jd^Qh6CxWHF^bSUr zt@eZKxCZ;Atzx{hgIiP!b>24UeO6NxB5)M-finDH_Ik3PKvyCkEb;i@4P2%CoL?xZ z$eZcwkNpyw*jurUaSyy`|rKLvJMhBniy7qdL9t^d&dCI6q?=xR7{raFf%T6TpwOM~_J zp;`wlf|>(*puF>o$cm0@8Z7s~@(rqlTMqe*5&Uz}(A~`Ep_lh*C&`q*>-C6;jJO7~ zbe^yyy0@-pOT?bVFce=vSlnA&gi)-K>_?J7c_o1jFL$Y6Fo?h2!-xTaI1}C0AjZWt zL}q|$MUn&ARTKh!@bg$AZ<=F=Mt3LrC1{_DKu?AHhZ1cX^kC?3&fAgSNBqT65qkGN z*9Gm(o45ZIq$M?u4>y!$ROc$f@mKpsQTK!kE}!O3rCqm-c&0)XeX)IQEol(@=9Y}1 zszzbHF?Wn;KRe0U+l%+|K{V5l+gSPt=<4214Py`aK)&)QrjO5OkjI#Ut2&NIINnAF zv?_sp_lr%V^;(L&_<(-lR9r?HP_LCZQI;m?;RnvtM`a5x)-mOphOsN7KYL6FUSdTB zhaDonqMd#c$?i9`(TXkZH+4!EJlB;d;q=dZ!W)_S^n7gn&>!Jp#DV|~`g)p8x;= literal 0 HcmV?d00001 diff --git a/docs/translations/kr/clients/lite/pics/updateValidatorToHeight.png b/docs/translations/kr/clients/lite/pics/updateValidatorToHeight.png new file mode 100755 index 0000000000000000000000000000000000000000..b2c9349b6b455ffd0854bccf92819937f98a25c7 GIT binary patch literal 18077 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 literal 0 HcmV?d00001 diff --git a/docs/translations/kr/clients/lite/pics/validatorSetChange.png b/docs/translations/kr/clients/lite/pics/validatorSetChange.png new file mode 100755 index 0000000000000000000000000000000000000000..16dbf39be7ea37ec240b429623df535e10c766ac GIT binary patch literal 36169 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 literal 0 HcmV?d00001 diff --git a/docs/translations/kr/clients/lite/pics/withdraw.png b/docs/translations/kr/clients/lite/pics/withdraw.png new file mode 100755 index 0000000000000000000000000000000000000000..2249b5e34839c9387e4188e14d39855993a75ff4 GIT binary patch literal 20935 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 ZbfkgttAP#bllBJi_<08$sPYO+`xnx4A^QLT literal 0 HcmV?d00001 diff --git a/docs/translations/kr/clients/lite/specification.md b/docs/translations/kr/clients/lite/specification.md new file mode 100755 index 0000000000..6d51086b36 --- /dev/null +++ b/docs/translations/kr/clients/lite/specification.md @@ -0,0 +1,185 @@ +# 라이트 클라이언트 스펙 + +이 문서는 LCD(Light Client Daemon)을 사용하는 방법을 설명합니다. LCD는 모듈러 API를 지원합니다. 현재 LCD는 ICS0 (텐더민트API), ICS1 (키API)와 ICS20 (토큰API) 만을 지원하는 상태입니다. 추후에 추가 모듈을 지원할 예정입니다. + +## ABCI 상태 빌드/검증하기 + +코스모스 SDK 기반 애플리케이션은 멀티-서브스토어(multi-substore)를 이용해 저장을 합니다. 각 서브스토어는 IAVL 스토어를 응용합니다. 서브스토어는 단순한 머클 트리(Merkle tree) 형태로 정렬됩니다. 머클 트리를 만들기 위해서는 각 서브스토어의 이름, 블록 높이 그리고 스토어 루트 해시(store root hash) 필요하며, 이를 기반으로 간단한 머클 가지 노드(Merkle leaf node)를 만들 수 있습니다. 이후 가지 노드를 이용해 해시값을 머클 뿌리(Merkle root)까지 연산하게 됩니다. 단순 머클 트리(simple Merkle tree)의 루트 해시(Root hash)는 블록 헤더에 포함되는 앱 해시(AppHash)입니다. + +![Simple Merkle Tree](./pics/simpleMerkleTree.png) + +[LCD 신뢰 전파](https://github.com/irisnet/cosmos-sdk/tree/bianjie/lcd_spec/docs/spec/lcd#trust-propagation)에서 설명했던바와 같이, 앱해시는 신뢰할 수 있는 검증인 세트의 보팅파워(총 스테이킹 수량)를 검증하는 방식으로 확인할 수 있습니다. 이 절차에는 ABCI 상태에서부터 앱해시 증거를 찾으면 됩니다. 증거에는 다음과 같은 정보가 포함되어있습니다: + +* IAVL 증거 +* 섭스토어에서 앱해시까지의 증거 + +### IAVL 증거 (IAVL proof) + +증거물에는 두 가지의 종류가 있습니다: 존재 증거(existance proof)와 부재 증거(absence proof). 만약 쿼리 키가 IAVL 스토어에 존재하는 경우 키 밸류(key-value)와 존재 증거를 제공하게 됩니다. 반면, 만약 키가 존재하지 않는다면 해당 키가 존재하지 않는 것을 증명할 수 있는 부재 증거를 제공합니다. + +### IAVL 존재 증거 (IAVL Existance Proof) + +```go +type CommitID struct { + Version int64 + Hash []byte +} + +type storeCore struct { + CommitID CommitID +} + +type MultiStoreCommitID struct { + Name string + Core storeCore +} + +type proofInnerNode struct { + Height int8 + Size int64 + Version int64 + Left []byte + Right []byte +} + +type KeyExistsProof struct { + MultiStoreCommitInfo []MultiStoreCommitID //All substore commitIDs + StoreName string //Current substore name + Height int64 //The commit height of current substore + RootHash cmn.HexBytes //The root hash of this IAVL tree + Version int64 //The version of the key-value in this IAVL tree + InnerNodes []proofInnerNode //The path from to root node to key-value leaf node +} +``` + +존재 증거의 데이터 형식은 위와 같이 나열되어 있습니다. 존재 증거를 생성하고 검증하는 방식은 다음과 같습니다: + + +![Exist Proof](./pics/existProof.png) + +증거 생성 절차: + +* 루트 노드에서 IAVL 트리를 액세스 +* 방문 노드(visited node)를 InnerNodes에 기록 +* 타겟 가지 노드(leaf node)를 찾은 경우, 가지 노드 버전을 증거 버전에 할당 +* 현재 IAVL 트리 높이(IAVL tree height)를 증거 높이(proof height)에 할당 +* 현재 IAVL 트리의 루트해시(rootHash)를 증거 루트해시에 할당 +* 현재 서브스토어 이름을 증거 스토어 이름(proof StoreName)에 할당 +* db에서 멀티스토어 커밋 정보(multistore commitInfo)를 읽은 후 증거 StoreCommitInfo에 할당 + +검증 절차: + +* 키, 값 그리고 증거 버전(proof version)을 이용해 리프 노드(leaf node)를 생성 +* 리프 노드 해시값을 연산 +* 해시 값을 innerNoder의 rightHash에 할당한 후, 첫 innnerNode의 해시를 연산 +* 해시 연산 절차를 전파. 만약 위의 innerNode가 다음 innerNode의 left child(좌측 자녀)인 경우, 해당 innerNode를 다음 innerNode의 좌측 해시로 배정한다. 이 외의 경우, 위의 innerNode 해시를 다음 innerNode의 우측 해시로 배정한다. +* 마지막 innerNode의 해시값은 해당 증거의 rootHash와 동일해야 한다. 그렇지 않은 경우, 증거는 무효하다. + +### IAVL 부재 증거(IAVL Absence Proof) + +모든 IAVL 리프 노드는 각 리프노드의 키로 정렬되어있습니다. 그렇기 때문에 IAVL 트리의 전체 키 내의 목표 키 위치를 찾을 수 있습니다. 아래와 같이, 키가 좌측 키 또는 우측 키인지 확인이 가능합니다. 만약 우측 키와 좌측 키의 존재를 증명할 수 있을 경우, 인접 노드(adjecent node) 여부를 증명할 수 있는 것이며 타겟 키가 존재하지 않는다는 것을 증명하게 됩니다. + +![Absence Proof1](./pics/absence1.png) + +만약 타겟 키가 최우측 리프 노드(right most leaf node) 보다 크거나 또는 최좌측 키(left most key) 보다 작은 경우 타겟 키는 존재하지 않음을 증명합니다. + +![Absence Proof2](./pics/absence2.png)![Absence Proof3](./pics/absence3.png) + +```go +type proofLeafNode struct { + KeyBytes cmn.HexBytes + ValueBytes cmn.HexBytes + Version int64 +} + +type pathWithNode struct { + InnerNodes []proofInnerNode + Node proofLeafNode +} + +type KeyAbsentProof struct { + MultiStoreCommitInfo []MultiStoreCommitID + StoreName string + Height int64 + RootHash cmn.HexBytes + Left *pathWithNode // Proof the left key exist + Right *pathWithNode //Proof the right key exist +} +``` + +위는 부재 증거의 데이터 구조입니다. 증거를 생성하는 절차는 다음과 같습니다: + +* 루트 노드에서 IAVL 트리를 액세스 +* 전체 키 세트의 deserved index(INDEX로 표기됨)을 받는다 +* 만약 받은 인덱스의 값이 0일 경우, 우측 인덱스의 값은 0이며 좌측 노드는 존재하지 않는다 +* 만약 받은 인덱스의 값이 전체 키 세트의 크기와 동일한 경우, 좌측 노드 인덱스는 INDEX-1 이어야 하며 우측 노드는 존재하지 않는다 +* 이외의 경우, 우측 노드 인덱스는 INDEX여야 하며 좌측 노드 인덱스는 INDEX-1이다 +* 현재 IAVL 트리의 높이를 증거 높이에 할당한다 +* 현재 IAVL 트리의 rootHash를 증거 rootHash로 할당한다 +* 현재 substore 이름을 증거의 StoreName으로 할당한다 +* db에서 multistore commitInfo를 읽은 후 증거의 StoreCommitInfo에 할당한다 + +증거 검증 절차: + +* 만약 우측 노드만 존재하는 경우, 존재 증거(exist proof)를 검증하여 최좌특 노드인지 확인한다 +* 만약 우측 노드만 존재하는 경우, 존재 증거(exist proof)를 검증하여 최우측 노드인지 확인한다 +* 만약 좌측 노드와 우측 노드가 동시에 존재하는 경우, 두 노드가 인접(adjacent)한지 확인한다 + +### Substores 증거와 AppHash 증거 확인하기 + +IAVL 증거를 검증했다면 substore 증거와 AppHash를 비교하여 검증할 수 있습니다. 우선 MultiStoreCommitInfo를 반복(iterate)하여 proof StoreName을 이용해 서브스토어의 commitID를 찾을 수 있습니다. 여기에서 commitID의 해시가 RootHash의 proof와 동일하다는 것을 검증합니다. 만약 동일하지 않을 경우, 증거는 유효하지 않습니다. 이후 서브스토어 commitInfo 어레이를 서브스토어 이름의 해시 값으로 정렬합니다. 마지막으로, 모든 서브스토어 commitInfo 어레이를 기반으로 단순 머클 트리(simple Merkle tree)를 빌드하여 머클 루트 해시가 앱 해시와 동일한지 검증합니다. + + +![substore proof](./pics/substoreProof.png) + +```go +func SimpleHashFromTwoHashes(left []byte, right []byte) []byte { + var hasher = ripemd160.New() + + err := encodeByteSlice(hasher, left) + if err != nil { + panic(err) + } + + err = encodeByteSlice(hasher, right) + if err != nil { + panic(err) + } + + return hasher.Sum(nil) +} + +func SimpleHashFromHashes(hashes [][]byte) []byte { + // Recursive impl. + switch len(hashes) { + case 0: + return nil + case 1: + return hashes[0] + default: + left := SimpleHashFromHashes(hashes[:(len(hashes)+1)/2]) + right := SimpleHashFromHashes(hashes[(len(hashes)+1)/2:]) + return SimpleHashFromTwoHashes(left, right) + } +} +``` + +## 검증인 세트를 이용한 블록헤더 검증하기 + +위 항목에서는 appHash를 자주 언급합니다. 그렇다면 appHash는 어디에서 존재하는 것일까요? appHash는 블록 헤더에 존재합니다. 그렇기 때문에 특정 블록 높이의 블록헤더를 LCD가 신뢰하는 검증인 세트에 검증해야 합니다. 검증 절차는 다음과 같습니다: + +![commit verification](./pics/commitValidation.png) + +만약 신뢰 검증인 세트가 블록 헤더와 일치하지 않는 경우, 해당 블록 높이의 검증인 세트로 업데이트를 해야합니다. LCD는 검증인 세트의 변경이 보팅 파워의 1/3을 초과할 수 없다는 규칙을 따릅니다. 만약 타겟 검증인 세트가 현재 신뢰되는 검증인 세트에서 1/3 보팅파워를 초과하는 변화가 있는 경우, 타겟 검증인 세트 전에 숨겨진 검증인 세트 변경이 있었는지 확인해야 합니다. 모든 검증인 세트 변경이 이 규칙을 따를때 검증인 세트 업데이트가 이루어질 수 있습니다. + +예를 들어: + +![Update validator set to height](./pics/updateValidatorToHeight.png) + +* Update to 10000, tooMuchChangeErr +* Update to 5050, tooMuchChangeErr +* Update to 2575, Success +* Update to 5050, Success +* Update to 10000,tooMuchChangeErr +* Update to 7525, Success +* Update to 10000, Success diff --git a/docs/translations/kr/clients/service-providers.md b/docs/translations/kr/clients/service-providers.md new file mode 100755 index 0000000000..b7dfae26a7 --- /dev/null +++ b/docs/translations/kr/clients/service-providers.md @@ -0,0 +1,115 @@ +# 서비스 제공자(Service Providers) + +'서비스 제공자'는 코스모스 SDK 기반 블록체인(코스모스 허브도 포함됩니다)과 교류하는 서비스를 엔드유저에게 제공하는 특정 인원/기관을 뜻합니다. 이 문서는 주로 토큰 인터랙션에 대한 정보를 다룹니다. + +다음 항목은 [Light-Client](https://github.com/cosmos/cosmos-sdk/tree/develop/docs/light) 기능을 제공하려는 월렛 개발자들에게 해당하지 않습니다. 서비스 제공자는 엔드 유저와 블록체인을 이어주는 신뢰할 수 있는 기관/개인입니다. + +## 보편적 아키텍처 설명 + +다음 세가지 항목을 고려해야 합니다: + +- 풀 노드(Full-nodes): 블록체인과의 인터랙션. +- REST 서버(Rest Server): HTTP 콜을 전달하는 역할. +- REST API: REST 서버의 활용 가능한 엔드포인트를 정의. + +## 풀노드 운영하기 + +### 설치 및 설정 + +다음은 코스모스 허브의 풀노드를 설정하고 운용하는 방법입니다. 다른 코스모스 SDK 기반 블록체인 또한 비슷한 절차를 가집니다. + +우선 [소프트웨어를 설치하세요](../getting-started/installation.md). + +이후, [풀노드를 운영하세요](../getting-started/join-testnet.md). + +### 커맨드 라인 인터페이스 + +다음은 풀노드를 이용할 수 있는 유용한 CLI 커맨드입니다. + +#### 키페어 생성하기 + +새로운 키를 생성하기 위해서는 (기본적으로 secp256k1 엘립틱 커브 기반): + +```bash +gaiacli keys add +``` + +이후 해당 키페어에 대한 비밀번호(최소 8글지)를 생성할 것을 요청받습니다. 커맨드는 다음 4개 정보를 리턴합니다: + + +- `NAME`: 키 이름 +- `ADDRESS`: 주소 (토큰 전송을 받을때 이용) +- `PUBKEY`: 퍼블릭 키 (검증인들이 사용합니다) +- `Seed phrase`: 12 단어 백업 시드키 **이 시드는 안전한 곳에 별도로 보관하셔야 합니다**. 이 시드키는 비밀번호를 잊었을 경우, 계정을 복구할때 사용됩니다. + +다음 명령어를 통해서 사용 가능한 모든 키를 확인할 수 있습니다: + +```bash +gaiacli keys list +``` + +#### 잔고 조회하기 + +해당 주소로 토큰을 받으셨다면 다음 명령어로 계정 잔고를 확인하실 수 있습니다: + +```bash +gaiacli account +``` + +*참고: 토큰이 0인 계정을 조회하실 경우 다음과 같은 에러 메시지가 표시됩니다: 'No account with address was found in the state'. 해당 에러 메시지는 정상이며 앞으로 에러 메시지 개선이 들어갈 예정입니다.* + +#### CLI로 코인 전송하기 + +다음은 CLI를 이용해 코인을 전송하는 명령어입니다: + +```bash +gaiacli send --amount=10faucetToken --chain-id= --from= --to= +``` + +플래그: +- `--amount`: `` 포맷의 코인 이름/코인 수량입니다. +- `--chain-id`: 이 플래그는 특정 체인의 ID를 설정할 수 있게 합니다. 앞으로 테스트넷 체인과 메인넷 체인은 각자 다른 아이디를 보유하게 됩니다. +- `--from`: 전송하는 계정의 키 이름. +- `--to`: 받는 계정의 주소. + +#### Help + +이 외의 기능을 이용하시려면 다음 명령어를 사용하세요: + +```bash +gaiacli +``` + +사용 가능한 모든 명령어를 표기하며, 각 명령어 별로 `--help` 플래그를 사용하여 더 자세한 정보를 확인하실 수 있습니다. + +## REST 서버 설정하기 + +REST 서버는 풀노드와 프론트엔드 사이의 중계역할을 합니다. REST 서버는 풀노드와 다른 머신에서도 운영이 가능합니다. + +REST 서버를 시작하시려면: + +```bash +gaiacli advanced rest-server --node= +``` + +플래그: +- `--trust-node`: 불리언 값. `true`일 경우, 라이트 클라이언트 검증 절차가 비활성화 됩니다. 만약 `false`일 경우, 절차가 활성화됩니다. 서비스 제공자의 경우 `true` 값을 이용하시면 됩니다. 기본 값은 `true`입니다. +- `--node`: 플노드의 주소와 포트를 입력하시면 됩니다. 만약 풀노드와 REST 서버가 동일한 머신에서 운영될 경우 주소 값은 `tcp://localhost:26657`로 설정하시면 됩니다. +- `--laddr`: REST 서버의 주소와 포트를 정하는 플래그입니다(기본 값 `1317`). 대다수의 경우에는 포트를 정하기 위해서 사용됩니다, 이 경우 주소는 "localhost"로 입력하시면 됩니다. 포맷은 입니다. + + +### 트랜잭션 수신 모니터링 + +추천하는 수신 트랜잭션을 모니터링하는 방식은 LCD의 다음 엔드포인트를 정기적으로 쿼리하는 것입니다: + +[`/bank/balance/{account}`](https://cosmos.network/rpc/#/ICS20/get_bank_balances__address_) + +## Rest API + +REST API는 풀노드와 인터랙션이 가능한 모든 엔드포인트를 정의합니다. 다음 [링크](https://cosmos.network/rpc/)에서 확인이 가능합니다. + +API는 엔드포인트의 카테고리에 따라 ICS 스탠다드로 나뉘어집니다. 예를 들어 [ICS20](https://cosmos.network/rpc/#/ICS20/)은 토큰 인터랙션 관련 API를 정의합니다. + +서비스 제공자에게 더 많은 유연성을 제공하기 위해서 미서명 트랜잭션을 생성, [서명](https://cosmos.network/rpc/#/ICS20/post_tx_sign)과 [전달](https://cosmos.network/rpc/#/ICS20/post_tx_broadcast) 등의 다양한 API 엔드포인트가 제공됩니다. 이는 서비스 제공자가 자체 서명 메커니즘을 이용할 수 있게 합니다. + +미서명 트랜잭션을 생성하기 위해서는 (예를 들어 [코인 전송](https://cosmos.network/rpc/#/ICS20/post_bank_accounts__address__transfers))을 생성하기 위해서는 `base_req` body에서 `generate_only` 플래그를 이용하셔야 합니다. \ No newline at end of file diff --git a/docs/translations/kr/concepts/baseapp.md b/docs/translations/kr/concepts/baseapp.md new file mode 100644 index 0000000000..ec868537b4 --- /dev/null +++ b/docs/translations/kr/concepts/baseapp.md @@ -0,0 +1,85 @@ +# 베이스앱(BaseApp) + +베이스앱(BaseApp)은 코스모스 SDK 애플리케이션이 텐더민트 노드와 소통할 수 있게하는 기본적 ABCI 애플리케이션의 기반을 정의합니다. + +베이스앱은 다수의 내부 컴포넌트로 구성되어있습니다. 이 중 가장 중요한 컴포넌트는 `CommitMultiStore`와 해당 컴포넌트의 내부 상태(internal state)입니다. 내부 상태는 하위 두 개의 서브스테이트(substate)로 구성되어있으며, 두 서브 스테이트는 각자 트랜잭션 실행 단계의 `CheckTx`와 `DeliverTx` 이용됩니다. 블록 커밋 단계에서는 `DeliverTx`만이 유지됩니다. + +베이스앱은 capabilities keys를 통해 스토어에 마운트 되어야 합니다. 핸들러는 키가 부여된 스토어에만 접근할 수 있습니다. 베이스앱은 모든 스토어가 정상적으로 로딩, 캐쉬 그리고 커밋되는 것을 보장합니다. 마운트 된 스토어 중 '메인(`baseApp.MainstoreKey`' 스토어는 최신 블록 헤더 정보를 보관하며, 이를 기반으로 가장 최근 상태(state)를 찾고 불러올 수 있습니다. + +베이스앱은 `AnteHandler`와 `MsgHandler` 두 가지의 핸들러 타입을 받습니다. `AnteHandler`는 논스값 확인, 서명 확인, 수수료 지불 가능 잔고 확인 등 모든 모듈에서 이용되는 트랜잭션 기능의 글로벌 유효성 검증(global validity check)을 수행합니다. `MsgHandler`의 경우 상태 변경(full state transition) 기능을 수행합니다. + +`CheckTx` 단계에서 상태 변경 기능은 `checkTxState`에만 적용되며, 값비싼 스테이트 변경 작업이 실행되기 전에 리턴을 해야합니다(관련 절차 설계는 각 개발자의 자유입니다). 또한 예상 가스 비용을 리턴해야 합니다. + +`DeliverTx` 단계에서는 상태 변경 기능이 블록체인 상태에 적용되며 트랜잭션은 완전하게 실행되어야 합니다. + +베이스앱은 핸들러에게 전달되는 컨텍스트(context)를 관리하는 역할을 합니다. 또한 `CheckTx`와 `DeliverTx`에게 할당되는 스토어와 블록헤더 정보를 제공합니다. 베이스앱은 시리얼화 포맷(serialization format)에 불가지론적(agnostic)입니다. + +## 트랜잭션 라이프 사이클(Transaction Life Cycle) + +트랜잭션은 실행 단계에서 ABCI 스펙 정의에 따라 `CheckTx`와 `DeliverTx`를 거칠 수 있습니다. `CheckTx`는 블록 제안 검증인이 실행하며 모든 풀노드의 텐더민트 멤풀에서 이용됩니다. + +`CheckTx`와 `DeliverTx`는 (정의된 경우) 애플리케이션의 안티핸들러(AnteHandler)를 실행합니다. 여기서 안티핸들러는 메시지-전(pre-message) 검증을 수행하여 계정, 서명 검증, 수수료 삭감, 수수료 수금, 시퀀스 번호 추가 등의 기능을 수행합니다. + +### CheckTx + +`CheckTx`의 실행 단계에서는 안티핸들러(AnteHandler)만이 실행됩니다. + +안티핸들러로 발생하는 상태 변경은 안티핸들러가 실패하여 중단되는 경우를 제외하고는 check-tx 상태의 `CheckTx`의 추후 콜(call)까지 지속됩니다. + +### DeliverTx + +`DeliverTx`의 실행 단계에서는 안티핸들러(AnteHandler)와 핸들러(Handler)가 함께 실행됩니다. + +`DeliverTx`의 트랜잭션 실행 절차는 `CheckTx`와 유사하게 진행됩니다. 다만, 안티핸들러로 발생하는 상태 변경은 핸들러의 프로세싱 로직이 실패하여도 지속됩니다. + +악의적 제안자(proposer)가 안티핸들러를 통과하지 못하는 트랜잭션을 발생할 수 있는 경우가 발생할 수도 있습니다. 이 경우에는 악의적 트랜잭션의 상태 변경은 버려집니다(무시됩니다). + +## 다른 ABCI 메시지 + +`CheckTx`와 `DeliverTx` 외에도 베이스앱은 다음과 같은 ABCI 메시지를 처리합니다. + +### Info +TODO complete description (추후 업데이트 예정) + +### SetOption +TODO complete description (추후 업데이트 예정) + +### Query +TODO complete description (추후 업데이트 예정) + +### InitChain +TODO complete description (추후 업데이트 예정) + +체인 시동(chain initialization) 단계에서 `InitChain`은 `CommitMultiStore`에 직접적으로 할당되어 있는 시동 로직을 실행합니다. check state와 deliver state는 정의된 ChainID로 시작됩니다. + +참고할 것은 InitChain 이후에 커밋을 실행하지 않습니다. 그렇기 때문에 블록 1의 BeginBlock은 InitChain이 시작한대로 deliver state에서 시작됩니다. + +### BeginBlock +TODO complete description (추후 업데이트 예정) + +### EndBlock +TODO complete description (추후 업데이트 예정) + +### Commit +TODO complete description (추후 업데이트 예정) + + +## 가스 관리(Gas Management) + +### 가스: InitChain + +InitChain 실행 단계에서 블록 가스 미터는 제네시스 트랜잭션을 처리하기 위하여 무한대 가스 수량을 기준으로 시작됩니다. + +또한, InitChain의 리퀘스트 메시지에는 genesis.json 파일이 정의하는 ConsensusParams가 포함되어있습니다. + + +### 가스: BeginBlock + +블록 가스 미터는 BeginBlock의 deliver state에서 리셋됩니다. 만약 베이스앱에서 최대 블록 가스가 설정되어있지 않은 경우, 가스 미터는 무한으로 설정됩니다. 최대 블록 가스가 설정되었을 경우, 가스 미터는 `ConsensusParam.BlockSize.MaxGas`를 통해 설정됩니다. + +### 가스: DeliverTx + +특정 트랜잭션이 실행되기 전, `BlockGasMeter`를 우선 확인하여 남은 가스가 있는지 확인합니다. 만약 남은 가스가 없다면 `DeliverTx`는 즉시 에러를 리턴합니다. + +트랜잭션이 처리된 후, 사용된 가스는 (설정된 가스 리밋에 따라) `BlockGasMeter`에서 차감됩니다. 만약 잔류 가스가 가스 미터의 한도를 초과할 경우, `DeliverTx`는 에러를 리턴하고 해당 트랜잭션은 커밋되지 않습니다. + diff --git a/docs/translations/kr/concepts/store/README.md b/docs/translations/kr/concepts/store/README.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docs/translations/kr/cosmos-docs.jpg b/docs/translations/kr/cosmos-docs.jpg new file mode 100755 index 0000000000000000000000000000000000000000..81c326e845be201ced330887ccd0198b66a2d667 GIT binary patch literal 289549 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 )Q{Ie^@-QtAm2q+agg)#W`gA;6zni_!S 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 z zQUSmM23xK_(zDjGPegoA{H$_%H?@`Sw?BoRcyLUREf4V={F6+RopU(=H}}i66oLnU z^rbiQ&ZT9;97w!OcFAGr&!;@Ur}GF|6eGS5t+F7bo^%skTV9FgN@l}>?UP~LF>MH#gJPPF20T=^h z9SYYrX!{QRma^i6nc*$#!k?&>D~YR**WB83-p=K#P)-6cuQ%4~t&7SveT;@U+UxM_~ru z%xBmGfVai+ZoXT7&$7AVpWN&e#3e(J%wy&4gr;k)78bfNO4QhCoSDF!JatW)bXD{& zj?;DQG<(zbysA3%i^b^B5N|@l6$yeQo*~I$@0zt$mc5=sswbl6#sux{i(VQDGuzzH zDVk|1<89lE?3zQcryAU=SVvV==c0~^3Jdz>GGKuQ&h8X7lscj7x+IU5`R!@OXM$Z< zfP35zqfxYVAZXI6YV!me`L$;H0b^jEs@Ha8Lk`2u=KF>+d^d?NGSe(QQSulXax3}e zLjTt*dav^+HpnT`7pd-K9f%oKZl6<3N#a~vcAsdw%4S@{I@#9?a{08Hw^1Kf z-~QgZzpZ#;c;`xfx}dE}TzDrC&F$lmXJZLvMDpFdB~7>yIT%Wly@`qW(2-lX?N0Za z5bs-dxj!M#>Ce#jis^SlcDB~Ta-R*cID!4b;~l&IEc}#eIBO6oK51)Bb~y%x-nnA= zr(!r7iQQQ(F312H${j4+6*+(Geq-Ej8S(sCY5-z5<6D^?o!c3I^DHIk8Ca1n2e0A3 zoFgeO%`2Z?%!&ft5s*hcdV zvXk3YT?6qhI~9>~6z*jf?#)vx_<{X+Y(^5x0ici+8zhSfXMnp{UKbndQxST@-&&~xgQ4n5o&A_boYK}|} zSb%Ktp7urTvNA7=-nnoOH(GV4iBWzBE$5&xJ!C&2KoYA+BE1C*0%*o*OT156+1onH zpU{tkLRr&}>}8H3f)GOtx`jZKbN#~|(PTk1BXp{pL~xCdZW>hEY}_r?YDpot;Eu?z zZHJNq;tHvzKI8_fr=%_Be0WKM!Cz;ri17eq?)r#yH6)SBkbe>yGF^W+E>S-8aK%pGm&740@oeIpQ*9l_Y%u-xyQY zYVg*yEfQoUxwn?5N36V3YZUlB-O9HrtBv-Sy36ybZZ#|hFf55#I*cafr#OYFoY~`h z3BR*`;^32NF@RU%t$RjH9p5+b-ZB+@ zRH`5RfGRgp%CNXhDB0uHk*a$`QQz+~(Xe_aF330h-hsiSEXrFxx?9v5I*YaI*)LJj z95#GDi5qAgZ3H|L@;J=n>R16K4`C|Vxrcbor13@bCc$-2+8LI==|Q7!MQ>zHS15au zyl@i|>Dr<3E*54-lKb^y?>V`eVJbT+hP!t4;ScWU<(zdNi}8H%scc100}>80Ns#0O z`ikXVPOIeszgU3(5RoCz?WTB*di)b~S&;DnzpcxNULN+EU_I`&en-m#1M$hs0Axae zlyN!d`n*7Hi%&XBE2~}1m^kBg&FF;JXlBi!`+8?-WAu?^ zpzI64F8Xo#td*-~lGEY9MZ*yh>-X>_CAXGm>~xa{O3ThU!98(`2e86HC!$8$TZ{~w z`hu30izZrZ*tK{)FR}$IomuW+izR3k*xuQD8LCF2Upa0qx6W^!<@TJRcXyR~IfYtw zPfU~;1Hsq2IsjiCuBfb0_{nj~YNYI2!tW*nE%CsrK$(odEt$~IcFg98%Ye)RN8xox zjNO?VqF=L%dx$TSi2w|iYBE_+qkwZpK=d>Kt+T?;h{#T!4o&F~u~+}2L6LLk6i!(o z2AyAVy^0~bP)S@(-k-dEA!017!jWOQ4h0vf^jB&A(9|<9mh3~9%_?g$q4U1jPw4aC zL_yxHJXr-DMMD9ZC+v3O)1Wm&mN{CFO(rjxIT4ZqNVB1!Aa^xi8* z#x#L@rHfXU_Vv^>fE`YeW|RL3E{=iB<{Cq9tcq(9Yi5~hd4|l-Zl)ULRu9!c!MIK= z42o+V4FdrO{ys0oHO%|{0p)w?;i9bsK%^H07!6eA{K8e1(?l^5X2!*b$c7TuoJgCj zRw5ZPI0y3TFuKsW$IGH=2xB|k5n*jzUZ+kg4p|51XpS&?CiiF_1WdfEH3}m@5%)sx zw_r9gJ`WPsZvL9;an|=+SViU6U>dpNu;o<6cHd68OvvvLP7<5L|3jF3_@Y9SB#+*_ z?!3m!digF47SCfov$6zTa@Y>T_k!G56n1_(uC=V9fW`)2cKI?um|l5NR(~@0$rQsj zG&|mOGW2U%=wFrsNo`zFtw$txzd&cS-cRxZ!1pGAUw97;z_eV{uqH57a%Jir-F9ci zSg!88iQ>dO`DE^ua^21(qt)+l`g2LyeO~?^kKCgOJk3ew8(+r3`LxQ9IGvt2yYPQ% zes9a64RZ0J14)vH(tN{5kLo)A9nHLYjCej3{di zC4_7U_2@ge^JL>5T2-d{UEhSauj&rC-!=4w_mI%?J7||u>62CFt^>b z)eihm_^-Q ziyUsPj^X5^Rb`_iukR$eJa(7VDk|#g@IgT@;MSxeLIdtDd9h9G5cf7&$7bCSoJe0~ zqgK@VovAy&tuZqQw8c@OXUkBuvHqFb!GOpsNi91#zah^8(ib3inM2&a4g zl@&Dv6!E%UDZ1$KIIB%edui8VR5Wl@T;GBH6Kp+OffJ3@7CNgGRRh&0qy5LmrRT!9 zGiMa!Pn&!zAMS<2H)9Gk(ED0eEATyOQ}ZMb@hE#a9;=)RkLH)mbsAm%*s1{ zvgiSqDXc>h8|Q>(Q^Ya-Q0?V71wxZmVP1)*;6KhyC8x@tsqQ%;X}ez46u(sldUe7K1!0`@UM; z$5lFAGpx9e+r|WgHP*zm4`xT_Ge`C|&-T@-cnY_hjcCVR4{fupAu&mD?Tdg=&56!} zqZN)VuVr}^Wfk{5UeTrunNC!N9l4P6%bYg|X$KxVgaTl)*Zdf!0e2b6K$CvrziiCA6vC zZNEz!cbdwc^QC5h?M)aCs{x_ly<~ZgRmrtYM@}o~G@`Xe%ulFJ*fiP0-{%G_c}7GM zc}l%(N=%GWmWdKfb-s98ac|9y$3&p;0bLcJ=ojL2orgGUQ|*G^>1>er?4iN3?@3zmPqD-D;K@(xeicuq4trLOI27=?h~9FD4d>hTBzrG^vprc-0J~ zu&{6>)n4mH=D?xUlfToRI!xv#wk6W#wyl-c7@Tewd`&x4gnpE)n;=#xQCUfXp4e}+ ziP;BgR?k^1=Ov`8DN-s-M?#fVn7t46_%7(S6bSK2tH!}?wbZN8Ps}mSK^J!fFGE-B z+oEVp?t|RLix&^76*z9TP}>-Sg$TM;#=)A>E|b1~rGcC5y}rUPP4HeD8q`a9xD8kL z$v_!GM!ut_UeI=s>!Mu-e3WxMrMNd?y&b;Bluq6ftL5Ayw><81A5wv9eL+eHwr7qA z#+a4c7dREw`w+9i3=j5<9lRli4v`~==TI0Ir;xWVEW8>BmV_*n$2W=T@r$p+U-xMs zH2A<56Jjz^fJ=elUG&Qfnn%~!Cuw~kyB524( zos0MiuJw+e!Ch78*G<4aokajxR7c9j*GkV+*HnPgglJ{{Yd)c7ZWn$8pW3vEk9j!B zZeUTH*SyiEG&sTUFq3HFS#z$2m?@CrW2lH{#Y{3x4#r zKEf}z+c?j3z&@}m`YnQR$E!Mx_oyQit*T%%yhhkXdC@a~e6W0u1fT6b%hl6|*Ogqe z(a_|Io29%;Gj_X_S%sS)PuLPf-*?Sg%e&4NCXWC?kmVZv?jI1AccDlE3*+}UorRKm zY~f}h7Cn?;ZXj^MK37sbmR|Vw6%)CKr@e}vb}DEk1P};?oFAi|X!`iq@h;J<00s}j z1uXj_l52`Zkl*byV+JC0wj@u;-1zd?SY=&Z z)q5M@^%zM0<8podEdVjv0x)EgY?Tu?G$j$&QH$JTEGYe7p}p#^qIATxeK|lXb7}m% zF|QT#8BCE%s+^oX9j}F)xFL|o(boQ>U3Bm&V{~SP7#Sg@f%8U2SOO zh)>_1XmI?Lrq#gw~zmw^U!GszCaubcf5 zAIrmaC9Fn;Ts}HAX1{(Hv*3NffQM6ld;vD<0l&c~wcNe%b<-UlaP*ilp;k10`^L5) zk5wzQoC(vX7yNVYugaosMw&5Td8BUxR&-1@o73lmv$R*Q_Ml8c43}4Y8=tgp%dz{= z-9SZAPV^Ar%k`yW^YPbIp(U1;>qhu$8&e9YA@Wd`+C1=$E(VJ`W3qUlVxvM3?{-*! zY~&{twrR>-Im@qfStw?11CUU!Z)?eDx1^&%`{W0kr${J}iAYLHKKB#KM_8kA^9!puh&p}s={ zTvsyKGtl4(V-q=b)2fi4qq_ZcQ6d`W>dDx0Dw zu3Veu*&6N_9`H&gUE%Hi{<4Hp&H*iTOYygom%)HA)^ic&eQuc0hk~!^6~^B}O@yre z_t=d{3BC+z@jB!I6!Gf0u3+cT<27Yo*<{x^J5mGnvOSIlZTs;0-*I^>KkWjL{Calv zi6~4zR;WwI7*(G+z@&G&vWzy^gFg#w9d9a=yYbvRJHBVMi2q0eR&t&79TSDDJy}aB z6O;Kh8BPG?*eRT>Z!;>a212I7AY{ldTGF!5u?0uP^MxSLC>Gt?6?Sk44}W^)Pt}pG z?b<2H4Rz4GT|^ao^fX-2*jt73uL2vl#gxsM-ISVb)TiE6ep-@iyfLyjD05Ai+A5n{ z%-=3G%ycghJxlzOL0gMdRZ@RgpHs~0gF)J6LaIx18GV~_UxZ+;$$x?46~l_BhSbcn zB^Mq!YL_|clQGA&QgqN+eq(KljDKR7Y=L_vZ_8=y?E$FU$N2I87N)u`<%8;Gz51zo)Ze%21fB>U}Eir4sXOmg&x&79Ws7k7HQq%D;jz$2oz zN!COzPq)!8@x{{DVS*Q+5vnuphxHV1A3yF47sg^RutGRSo<2gJx7s%pIk9m-56z)p zVb3@;Y4xlYUK`8Z@NJXgNEs0Pi7ik61tm}4RnJNb=b7AD`?v4Z_ix|0fDV7rjyq^; zUoy4iD$X?Ln*5`4=)VthGR{2eP1cUi${M-a8v63H<00Ae>a9OI8b$7ogqCFJ_u`xcl&^uPp9Vx{r5wjlQ!wLAlCN+A=+KG7@V49xTab-;jVvhf;!iFtdAR*s@OuG@xey-x0Vaq!m|5*1H4 z+j-ZpUOS!*8=I^Xev^Zfe&El|gt-7I)5ScNXpqR}=2}ds-pq63hzX3&*f~3NSA138 z;@h$p?sjqiXa$3biLDk3tmQSrQ4e1S;zXZKf%>0PKD}MVrfC)j1{wi*YMLD-LghyN zy8viXWn(h1&+F7GJ(Xh0mg-7%vHBeGS<$bB`A@C2w?-JVObYMa>;|cgKI7MF{gHz~ zz2r@BA#duR5KKzlw&%@qStZ&AGkM_JUeGaV*M zaCn9<_nC5CxV_$IIwx_^8Oi93^|Q)bI{4=$kIIKW!R?Ksy^T99&EhNljg9gYw)CDR zBRXF!%t#J|+hbBxp##ZlzNgK91~#|NsP6?F_pZ@N#p!d;=|9n-$Z-`KFC$}uT2z4!Z8@x}DtOMc7L0)~tm z$#lGT&u88!RJP_n^WaPLH;I?;*4*Fe>9mujP6B1IAJ7B#?fn6s(v)(ZhvAu;_S%5^ z{QAsiEha#YZ;_nsT-82qaT9NjC)eX>_X*sCY;54#wY_b2PfD&CU-^3FO|evxlk<%U z1`%r#yG@KHlsSIb1?l=bJzEZdqJ-SRMj7*v8Qes^2u z7HeT!6En*gBtFSoq&gxP4#jFtI^bBO!V}57HSLh)AIho*UIDzE{C$dPuJSDQrRD)i zz|@<5Dy*>XIG{ruL1oE3&h;iE&w6f+H7z->F{p0x`RO1cr{k_88kZ9c z%xY|6ePD`n43b+84NZ15sN1~Vaw7V~N2C)}u|@z|CtilJ! z*M?q14xHArT8BdkEULhMW#OmYbi<*&g0wbkOCEQoDIj}k`wrQYxm9xH6m!V7bC_+f zrLNJT`C39S>~u8A+4GSbm?hi*);;x5?IaKKyqKx1%FRxP{??~Q-i{+G*sLnXcc%WE zV+k953G}owoB+WE?^2^vtUe^D{Kc9vAPBg2^|f{K(S&W4>3_N#I^4DPu?w_|v*Z4d z0?b2Bd~$vXSey>X$+G_J0HWZA7{9$rZRoJ3sKmjpVH&7Y;*N{$HI}uG_@I8cjPDFq zN_=(RQm5KKwtO}GnC|}kU6#My5n@LlAG52OnJqevBYZ5#5aT~LJ}K`%s4$wl;kQk4 z+WK#6&&+JsJ~T!1SU_y?fr0M64JzRh4}2y14_3D$O!)Fwvw8Y2&bBWR03j~mdShH6 zV)kch{!{SIEmjlr^O&PRZ6fjs_rr3#Lb(ILkRX3Io41EKt?S@I95YuoxD2v8-*a)j zoh^*RkH}{1mmQ<@FR<}J2|uAC36s^?zPPRIzq8}if4tm(SQzNv*lEsL8fZ>0ckwgt zO2_$Cb-_ay!b7r(PfoH%U*L3WhI}A z*_g=`gFt`y-kQpo>wB9)oFj?R!_cBiO6w@5wgKIR!2Il8su{x~$&5TE25|xQyCJ<_ zY{=$X##(a?*f~BRihYQQ8H|lAxwgJlFVHDV-=|Q*02gyuR zPLWQKP<3_(UDXTP8Bhn06=tjO1cG-H)&{mQt_wDm?Yz$vD~NVa`4j;wANnJ%1Ebdo zW|HJdhd1}=uj*wsTR~T!07>;9gvx_ z)XP;(aek^C%mY)Z2w8IM@weYYJzCm;sZk(O(j`sMqsDRK>P<<7^f7lUuK|Fa0yKzj zLR0VRjeB?{GBc0%=Iq2|xj^epd|7knDE9TH0NvEfRTWxPHnCANEUv!)!aGIC>jlpq zT11*Ql)|A3%D&d0P;>H%eJO<{p=pnyzb~*xHrf3n?!&;JIeq+4$Vr3r$e-RNd+}LB z?7*mC;hHfAr~9i$V7{4-K}JP(ty*`41f$@Qr2SOZo-sgw0PjUe$WWT(nIsE{cL*ks zz&iY_p2?fDntgYm(HBE-79S89aLlg>TlMK$b97*sn5Su8R+`BG%ocl|<6Ob{bs8Jjw}eXQvbfQY?%`W}LLpcGa|1&G?zDf?d)=QuG_f8)xb7g| z0;tsB7fO&)-@wsUxlqqs^zcxZ2(1J8YYj6?@wB|BnBF18TG_$_0@O@+3lrc!Z^ zuPb2IAJH^mwSY4`d0|2c_$Sy8zrHc+0X~-M2kEC@cCoQMsJcWl6`Uhpjcgbj74+Ss>+m)E^+iBkW^q3o%cu z$*vzA@K?<}ybt+?PO;ZXaNdQ}d765{lY*0%0+@ezFfFcJ{$`wCo#oz16U2H15QOTA ztk>l7-d^-kmd$F3LC?FQ=wE&qfW068e8A~)^oSY9X-|=x{E|eTPI@V`Ts$zubLje& ztM}}~%j4cMc+LN3rL31f*7CABbZKXK@%ElEdCD{G8sNeDJu_e*p&aq!^r-_|w9Ko> z%*c!0OK2tVHQJ!bQTg)%jrJWL$&j^$bcQgUL+$mvH*^TYU)Ks^TVsF$O1J-dN!glj zm`zqo>t<&~d_9S<80Jl#2C?E`*;wuqC@yc^%A&3Ae}8Rw%V-tl-)d7_<^#&Lkq~P` zI)ad|1Y@BYh)`DiMg9wLPP8de8HZh9SNDO}J}88M48UA#@$H<(k#DVaf1f(neXhm! z7E1pX&^ z4m~%1p790RD7L9MJxru$sNKpY#@1|K82gsvHry}AvNxb=CDywZ-i@P}1Wc?mko|=A z0>PSu|EOPX4XeuKxmNmOcKwn(6`e>qCAcS>r_3d%4!>M@BjXEB#F`yKxL@ccG4<(h+%m*8ddjXO+O9k+5u+Zr@kOc3J3;&CdQYBwWjVxsT_h`GHP&7v3PCL`*cTgu@|JsC|UiXc-V*Vz6iSk^# zd6fyaNeRu=O_Kd)%-;X~AY*+xIY3Qrl0ws<9=uE@+5CpScpe=KQv+vrNaFXv`9O5)*=a2A`|PwoO4e)_&dZ7`&M0!^y`O$U z`?UV2Ilq$dYfg4E`sz8xN6p3j)AJ*W9kjA@W5_!5AoKS{QQMqoRUlU)iI`Os-o^4D zuuz-f`&|b8?mX36C{@z^*C#6fd_7C6-Fw^r$R3?KLQG$mQ%y?qe<7os@Rt7KAe=?9 zx+P%;(V+5|0Py|i#~E8T>1NBG<1Gyi)sy`OHvr*zRyO5LNb;XQq53qU8s$5w;U?_z zL}jox?A_Q@_Hc|!XC!C-`WGn6F8){JY74OB!s&>-MR=Ny9w>)OkWLXi1{6c~%j4eZ z6jIam!g6`XYAT)FbmW)W@M2vgeZo;O z2IQZP!at-7q?_b$?yBk=}b2)STug`+a%MwON2n7b^BZp7U(d z0r6=vq!BtA5FJ8TGg5AMa;p;PpP{WZaWpL8gS`?m?lQB7L{Uch2>XKbmMq-*{Yus( zSOE#6ibE~s4$4@*(379?Z@6lLHl*jh<(|(|!`-c;`N? zaWkfcy;CAd6lc@is`2frc{BRt+Y?j8&!$VL|3%$=KU-(v@wygO!&bg}-n9*UGlhE4 zKA{`_N=3ys4Bij8xKpfAh<~Gxy8{$@fsPDzcIebt)6t0?+3M^w>WlM@$%O-li~qG8 z`tU*EQeGtrC(V)pX}6e{EVKqB2*jZ=1Y~GE;}07BQ8y z7zr=Ic6t$HII5`s2@UgtVdreX$+XuA`YrQvxW`_C0p5B$4J;+KJ1woq9U2-K;98!o zs8CHt6WN;><|>CO&)9Nnm1eA&ZS)diRU>4jAxVb`+h8_`th}m*&;;iH)8zB0sIPvL z`C(iwrI+Vq7gXHo%8C9!CuyS>nT3YRn?(cibT`(9RNZv&YqbE zWAQ7AvN|zP?PBZ0y`W}HSSZUNNN32~>fsG31N}tlVg7>2rxs+wtFun8dRmaegW-Ng z=UsUw&c7C`JYCQi8U=_cKe6ujGd4e+QgJM0DytY?|;ye%b6v+}7 zneCAf`{gbf!>6cNCYifh79a1%vH|3U*rQlkN=yttHTQ`=_B2mzdrzrbJ=b!bQoa(? zk8ajbQT#R&i7jmgN?m(FNIa|5Lu+kd#p!eNX*?WhO1T<+HT?wn@SEkGg1Q;!((ppi zj%X=O3ORiw{a#?wal4q(tGp0BOOF;_&aX$FQwOj! zwo4A6CL@48LVY3gT(h}vEhi`U&x}@Fy*N=vwU=E-9vdh(+oVBZeO4vOzcZB!r8wcG zm`kouA~GPh=M{vuA^o#+%DXMlAD7~uMO*|~nB;=dDM#LEs~ACtEQ!J@eOq9n7X4{r z-|Q!C=u>^j%_z?Z0lN=qk$x@ZXCUv?3Kc$6xr}x)0oy{{aN>XBaSP%el>4m1B_apO z1rEH-?nS!3O(A8f1<@du-w^&77#>R4YIm$*iHS+CUfUgSI8+M|>vVMCS()Vh`&qCp zXL|-$b}#eFneSWgY!}i<``QwL>ywTFqO3tP1;5HnGdAhXGN^cM-vqa`Xj4xKxKEXf9?*Y_^NeE+Vk!xKxdw6t!NK4 z*+yfTN5!7?=(`G!;V*-*Y*LAw@PaP4n5WV9DJgx7MMd~(>K!dZ+`I(*JfT<`U|`Nj zCgllM4bYJ_85gP3=P_ya+#K)CFdqeWC8|e;XLoN1moOFmaxoyktt0|PNO{;46F&s3 zGoA%6OR!ycY?8p;h8vHPM}Xtf@B%U?3Pw-&NaMKjpyb(EA@H*ZcU`(Mqd9d8;g3s4 zFQk3Wkj^-1tOFaB)x+q2UEq)vnI*qjTtI!^_e1Q?;Ubr7$9wIvDCf|dBK1#jSvWxX zJV8En*Z_PA9U>5b?v6xsg9zX2h{jF`W zr1pDVzz1+mK_(&ztSNc$Z&XUt-oi?nxIE}0m&uybL(2NSJdk`3q>Q1Y^QSEB*QICX z<`)7QLPX5tZ^Z@GL5s;nz2{m+4!&}4c5#(9){rItjGo%*N zs!NYY#OFn$VtQvIX_izT`V(sOA-Vc5*eAfBOi%@tjbNI=ZO?V7P%pk$sOzT;cq_a{1Y1awQr?* zDsr0m1ckjHe|_9fr?e80D0PFWREI_IbH6qemzT=_zr|5#XX{Wl3*iY6n>`Hh#>L-CCx=tS0>UhV51ypS09u$Av( z$uTxAF}CXnNdxj^uU}Ity}iBCupE}I%wF$WX^VdO5I?+?kt2ESQrfp)0&n6^fbU2j z?GgwrxMMyO(eh;9giW`a|7f;YrIrLD>nTakGq6QN0Ywg}BD|&=9*a}WjZJvBcGCO3 zdCnf7%WX&uE=6DMEbH@WRya{5wpEtv0Lz5j7TARFl^f#Tt=)6BzG1h&;AO91MYp5n zW25AOh%Ej9NZ(+>2dHvxXQ&okmE;-ep6x{&~#b4cP$5FsE`;_*vv)V-{%4AAK#ovq)fb<#EH7m>TzuGBp^9i*|W z-Iwv$;3ZsX^OqesNe1%6WdI81QIyWc6LoeULOkETzFf!lG6LMZ*6&9HM$ky)p^O|n zze8dRY@FwAl+Y|qlIQlkS0Kq0<2~CCac8Gqcw~7k1i~F#r|P3h{O(p}D76mc>e~iU zoWL7BMn2>}pbvF%c{TTD<4kb?LEhjNh;Q9Oy&{f9pFh+#SPf+szRDdk8@Q^=SyF1Ne!;(z6}9+&H| z2z&QlGUG3i2mfmdnnB=NWL{g8?T6U`vefOr zxE0b^Y%M-Zb~aIKoUM#zk4VW|K`xXmovzO->sRiX0bxCn0*|C84I%T{{^AJ5p88VI zdaM?Bt9dYmZDw=DkG;%$WZ=M1z33uB>gtBE0KzCSKJMVW18?eYd2&o-3e7e=f9sdG zjTed=^7zMJ;jC~z7wdNeU>4C&du)ds@!}5G`(;D5 zZ(hRRNd30}MZu0o4vsF?NL*g~*L17Qpq~7F_Lm(U3&M=#who9aO7t(Avv;OJLLt8VNQ7M>gW4ACO-MMh%8SnpteSCA7Oz=!6?+6QT$GJzp zb;N5#J)iLoJS@R$2CQnZ#LJ|W7jpZ2#@aiCHgp^|YVd!bzs33>?^HMaHcMIg<66Uo z=x}W+wq|DGhk#FDY7U}skY-_T34LU8y5a$;dQIlbhZU$f2is71lp?^EDKT-@5tsgV ztYf2G)Qh5=VaR7Bh%7>R$CL}39C(>lH^p@V%;US)5Ek`&qzr8m1oW0?f?|5O8nj{h zcgiA58UwU<;kKRZELV8h4e^+Yjo*SXc0hpdHG&hVdi;f3`}@PMYXkBt6jIUd{@?z* z(ECuA)cWJ>^xTgx>%Ek4)C9+VR=h9gAd_E=CQ8j+@P+*8%*r z+{s;4IQ&YgczkC|d824CO z?Q7c=>od0*z+fI#w*C;wzq?rc$R+}#ryNV=sxEx9fJDUMux7o}S7WA0A@PaQjNHVUkaIdOW3YD>7tjgLWiSg1_&O%=}fwSi5?$DuUqYe-dQLgwDY8O^)FyoSpLpc zmGPz8I}#Jvn$1I|*>bY;c9ruF|6IR!bLLrJmmQzeas5tO*e$X%*^B08rKu?r2H$lM zkUeJ@g$A?Gq79c&=3JE;m#sV1Ju8(7e(?~jrxFLi?D7L;T@+zxTZ4;k6zTgEiKh48 z!J;U~CQP%-WY%Qm4{I8zE$`hS6(@?{vvjp%Tue*f1G%D zrLm_V_ksCjX26lmGQlYCBFCteY_moUPN74#}Cnp(71GyJ3a?A8~defTI>*x*usCt zJ*e}o4xjM~J*2f}9?vk)sr+W1^%K&Z=e*C|)j{K^E7a?7jYO>(w>xvO1X*M?73*vd z7pnbLF)GCcmDZ1fVV|wrXuz@hRZa)sWZdC?`e-~+u(_i1l(d>4mPLTrg!{};Y6Fvo zxoMb0ue94ueDCTHYsC3;1LsiZ z7Nvm(5y@y7z5buGNyb#XTo^vULHSEkg?+!|!g6UyOB6Ci7I*t-W|ZE`_6gV*Fs`!Z z+#WZEGst>uHCCPhFYl@(x2^ZwKqRU|oEi=;D4An9`d{_0ypA7VF*bc=X539D)%$Qj zfN?&WrIoX%j@vUyWJz8cAsx}R3VptOkyIIVey&*KeiC6zYEj3(B@eW}%0h^W<~v$* zQp>eq5-XgeF%j3(3*KI9rlJ>#vr8NR-4$6a=>9`|!}f7SqY$mgp-hzoZ@tsiwb?S2 z?_`3TnYk7elwe!CJR!9;3>v1UO(4MrC-+NU2E|eAxNTw}*2)3kJun8i%mbFI49Rjv zF!8+Rk3Ei`;>=!mA4XpEkyi!u5;zlES%>-e)PN~>g?ju!7kX6%+!N#V?HjXu5@SS4 z1mG$l{k*Y&GNDF#ieqeZammhqzZL@F8b>X|p`}HmpmhXhaD}a{CGgnvprU=z_N4DN$U(B!tKr-ZAIjV)hz!V#VX9c>19bl@j80OIA{pvt&m@C7P$ zf4?=SwUa7&BN;#byDTkU9Er^=jnmwehUiC7fYCx-e(bpR1S5T-iQ9Z|El9B zbOJ23@(T$pBP}kc@G(_fBkWNoR3!ySet(fF!2>F-yX*v-!pkxN!*TE$`NzLJN1mmW zl1h^{n$SU#7k<3LcPYMbRKQ0g@o6#@Ps_u1lGJ%~tL4#=jD z-|c_EHJSGL2^Dimijn`GSMQ;J2f)4~T?zLra_Nsonxe)?EeU3VcB0k3Cz^nj6^Pcn&xg$XJ~wOlCfI;~-d=o>6*li%mU#A;;!a&7TKA>~ zsGop#%rpvVM|xF9f2b~NQUMh=LDJ%}usWj|D12I``Dp>4YWax@F#ED|;Oc%zIFKX` zCj2uP{f^JgeKDi>H@vxRyGknc^YY30B;e*SAHUCa;aBw0r}ba@9fC&OiBqnb16P#X zGEnbjg#-nG*=RgbAso@d#-3pDKcSaaKmiw8yoOAmx-bei%*bLSd5asr z+R!IK$~jJiN%j5|-HVw@7*jXlV*LKLI-%>eC5-GLx zUA$?L487`i*L-`kY6>T-a0&X(dzD%*aeKm`&OYqolzyGVxbwb9wK-YHDV9q*IX?%R zBkW6czV7&^yoBHppEwU!MQe&DqiPYdC|WXFqdkZ07$Z0VhO|jlZ^$FLdl(yp?FX9T z=;KjC-mo!P>HB0gOi>N{N5w1dErlfRixv0z^(N?Q2aDa|SP=c8O~HxVvQcY!N>tvW z{xf`OZ|R1`-7T2K|CQ^J%-(3r7rO=iIB!T}NQ zi``+`f(uN?*y|zW*YOT#po`F$c&0ssDPn~Dpr`D5w~{x?0R@Z!%*3%c>xL2_V$hf6 zN`M@l44vh3ZEgV(tbi0fEmm6we2N5w3<~zK?N`5Rf65jbT-~;!Wh9>5CW;0POg7kB zHWe^qprXBcnJ^pkxFng9VPPtN1QTdaz8q|Bio%hp7vuL1C1^eN7->MG!2P+f)=h3- zuvHc-BaF%BRK)_>#e|*v9Ja6=H4OXL1MDz)ATmvBn*ricgaUj`TV>tEEhQid2+%1) z40MQ-?T0v%`8Fuv3?GtZTrDiLHErgrif8$KUBB!t67qy+v8S`b*z9HKfhfT>rGy|M|(CeW!lC&ICrXSNfGS|7tu#D~Pe{;uGb#*;vwSQXBvsbNjceWS25#=mbIgjnq`OKIZAV@NO68_&ShFkiq$5g#TBKO|1)Em2eKl`*Hl!%<;k`(_8*7d{`2xTyzQ`<34r_jp+xH*rvd z1#-YpYycvY)l^iJmI<2FTAQyzSK)s?&B$JkF`rn85Us3sVjXcj!6iI;PhVDv4Q1~L zEu;0mUX-txV(iq|$dua_*TZn|-n@nP3UZ2zzuz}}x>Zyh_Yz?lW{P3a%#H9!0AA;y zP$RTo6vn3v@RW)$29{{ANirHK8w}eJ8=70s?N`coEh^h*Zc!;}Sm8ma)Xl%IN7yIj zif2Nr(3cvdQuGb!4Yn?C$?2wIi{XqfDD&}fD^`fbD!hpFX#~ z5L!q=AU(%-`~1Fdynno7I0lZ9D9Jv1uf5h>bImE-0$S`%@3`FVZYUG5J2dYuXdc~0 zQb?YjY_2F{wZXX2E3@_|?EZQu)8ZzO;*j6A`SA z$Cw_eYK?B69?GexZPH9GNNncXsqCYRyz^^9LcHg8_l5v9y-^w32T(yPn!zlz#8!oF zHL^q9LRN?xO2l3ROGnf7MOSjW<W6NlqmX>|n=f6%|Y#yKegUPIm?n^CbJWOlnu@sY?G{`8DTX1Z}nja^8{IH69dYH%&{ zm}KYD6_z}>8~WXfxM7x(8?Z|;yTc74RwON=^v9&gn0q$$Xfh|Isc6>L^_6_#{S?NsS!23`M-5!>XLhcBA1Rn)mhVGLMO1J~LY2E{KTbrwc zLVTgfpiKEq-#XJ0Qu-jWSYtHS+Oq~<;sJg0x=^JwS|GtK&J)5tf!=%Ig@LW0e z%MA_nOYbrfKgM(F-ub3t64qgqDwmhhiw%g6sebG}`zwE7;@fUd1@g4Bc6)cVCF4~p z5asYw=;%ZL*UbM#A$-N{J^OmqP%XACoJX57q>z2howB;PCPK+aHB+?=#HLX3e(GPu z10sV*8^efa`e?f2-#UIKDd(k`gVdxfrZaD{kZRXIhCA%OAQ$$Xl&N>ZmQ#g`&}}ri zgjOfSxQclb`$Y7wI_9i9v>8f_^7-J8*aHFPpw4+!_{hyidB5d)A`>2oVA&KsFWh-F zNwIXN>Do9Ge#l7iE7H-rM3U{Oj7FvuJ=khF&2L60ClFce)ijG=5|T&0PU%c04Qd zR&ADAT}nsnKoiTA*E5`8Y?H4XCyXm6!~8Y|2pSc=!5%I`+ccyMV%5OF;^=Xock7g~ z*Na#D^x-jZ4^|`(`@oSq8THub1Tf+lEcE5VfwC8~@}JxO75$HNXYVn#@Y3kKU5vYP z6bIBS*zwTf%~e02GU^sGPhoIryNDy65+>&t=|8Y2Y!0Ss|Hy)vXa5l3yAJtUpUH^!=UkyNj!BQIs zRK{FFc?p?6J}M`Bi@*dHAi9ERoY{B zbb%SLN7enfQ=q<}1dXz6^tRa>pAFpS&d4EYybOJ!?qpOV}rh zNN;#0_$@boe3U7b!4iAdD^2Q>4d;e%E)@#Ib&?#7fGSnwNbSm$&Tm^!m%9v%FmR&( z0EI}BF#YW~K4zd~iL3F47#05Ya2-GCO0lGGp)xBuWX1Tlgt?zjAFSo4UtB+&X=SI0TU7T@wOr71+mJFe%Xlc)_ zUb}X=<|Ft_W)G)5ZfPMR}lAKcbBs(cN!&btEx! zvjn8mr^JHRTcaL7GqS+`aB=1q!3mGg%G0-BE-HDpGNUy50<$e-*@~84J9F@zk{*$s zYgTYpKwcmZq^vrgRgJmafnH@S7VxW{?ov{FgG}y)%NUZRDq+zT;*ayQuJ(%BR;hs{a5hfo3 zxe^erPr!*Pr>~GE z!dK9Ls+EJ*19ixqId=?alN@|=+MvRr+%Zp!4++r8D)%Q-@3XWKx^zWFj!ep z(Pjb-O?aUL_9Klj7+RvGl@Jr24@roa)jR95TL z<|rd^34=}86nOB>f9P(uzZv?TRH4E_atQ%S+5aXX0W?4m=!VgE6&7K`E3rP*2Z`u~ zhz@a=7^H}V6>fEW_ps1@&V6(0;_(&Ec(FJz=-nR%sSnw};HYL1`@DE_Pjn1GljXlr ztvh!v$}mnYHSGwp|GsT=xP$YV6Ps^wn>Lg1^%L{xg2k%cmKhtAoHD7(X#+Dj|rB7vXSJ2y~h>f2`+ssY&bEjvTwVGzouHY?{EN_9T*r?pV!vYmRHYP5hG|{2^YZZEm7-Yy-Qzh zxvzfpd`S(^afi?jfH8FqK>m~|>=cVD23l6ImVaY@%252vQ1mNdt#C-b=sk+9xEilvOC};^ zYi+j8zIJx^w-3Fi48uPvFriN=*;pFpZdNerD_YX1;qkGacdUXq9IaJ9BvCmMHS<#l zI7US*Eg*|#oT0NR`kL+#`R}A3s&j6i`5-*8SisVaFzrfH>#iKzyXe|%6qo6&>g}n5 z+!kez?JGaDjCh;-!G}^ULVrWc4aBFl`k>9PpFZ0nEk6$2nMIqZL?6@z&hvd@08C-g)MC$Ps&*Q6}op|?SUEO zF1>#`V-CcC^oI^D(gO#A?Qr)sn&JVOvZA)l%Bh6dN{EV+w1b<#xjRjJ^w-^Kc7O(m zNX3q52?$a60#ktw*oh~K#mQSv;|qRc<`@4SJ9UD5I0`JX`;0=7=mDqr@pu>Uwn zrp2vW7ttD9+{ODi+o^UgvAjn(md6j;Aun^hDC}apSG-Zl@cTwU$OK_;J+jZo%C0vI zHxOD)T{TwFg{Y2{7m4-ns@3{(S<6iPp|LLSKh10XNMxolXPoz=T^-IFk{Q-nJZ>5v zSGFL`L5U*^(kHr$V2@UY0T>191@iWffG!%yDG#;#3HoDH7Ont-1jw1{G}2m9Q30Zb zah)msT4*~~+)v)^yRoeAKfV{K{x=GNvn9&Zt5I9mI6>VkJd5{O69FFZw~TpSzQk{s zQxNtD4j;rTLG9il&#JZFV7_4)UL67!Fr`uqe;0=!re-b$*p9LzUJU6{w)?hY7fgY>C!9zCGk zW=)39KCNR(;pAq}q<8v7+4^HjU(EoLhWP-78s{1QwQcrZxDq|X)({|sK9iwme^r8O z3$aV7x3n#8^m{vHowuufYCzgxx)oPS2kH1fW%V4T6I*#nK~aJd*v~&>Ve!FdHr+;6 zK&lAZh3y*oq*H_q)9l}>_y|ytI;|UXBql{>_^Z)F8&&2{lLTkEb;v95isfIx9*k=N zU;k88H1HeMjDUI_wbxpdxdgiwLW_hNaKPiI^pjeQ2#VR1FkFs`)9{qz2)Joq2O@prhvvH!t?Q7FLD@#-fe6wuQle|4cq!(s%;9}bPfx!#qtM9ipf*rL^ zliyG`;SA2;S9pI7%6slrMFprA$I5DLAkzVqd!34{oY2QrV_Rk>ug!YBM&oQ<5GYj6 zL;en7@2^MA3e^l2k+Hb^J)GCp{1UJKF+G;rZK&H){#q9khbLrF=U? z;XR5p{qH>sPt^@?{ktzjsDNfF^%yHU=Dj-y^2Dpw5fTK#yQOL!TJ$Iio^JGlJ>WAO zt^{>@Hi>6S(CiuIO|fUxfrs?YSl^U>ljWVev$SPDU>cg7tDmY1@ zKp4S>-Z>Nde-+H7JDpg&f>2yzq@4@}@k79;iF||*BLY(kwDJ-OyWL#hWL#A24KF;3 zaZXnjNs_+|Pu35YB)5`9<|y+@CccP6~gfu zbOPvuF)xC|7(X+rkdDA#XOX+ECLi?2oJ$NNc4n2tn#whjw{#0IKrXP{(B9QPHV(R` zpT`>)re!R@YplR-eKutKEl-!rxx2u%MbC^qlKY zI?lUZ1n~tOpx@HNrn# z`dD%resDBM`t4GYw(7|6FE>FsKwS8OJCgn54L5o|o=F^c02PAi(PVWzO^#M4!04xM zgLNJI_p47b*Ef$R*|a+j66ivI=|Ue%vZZ)+xu!_K(i}|Z`aE%L z@oI9hZ~xVrAM%g+HUHpF;(@gvR!Ds4NpRN+m_TpeT3!i$b1Cu@D1^K!`h_?2jQN?d z`qo9K)Cg_$rqkm}eQ92LkrXfgTiD-_W$|heRr6X?m=fohl$cLwv0IQ9>0J;HVDRrL za3PiM%~_w6xEfpIe`KYeV84)DJrvaSO*Nj&VLZh{cYS6RiI8QI z1_*Z@b$NsTA^0;=4CT+r)&>H_jni|U*l${LIB;Pz*ZpGM+_t>756n}g&o6+(?%M6z z&3zu^8v-=ujJc;s`G(q6J|_cRuTLY>kQUOY z1F4Rx_msx!y1IKiGU#^)Eu)J&f(UW?E8S-K3>v#S{zmO4tVGixc1)aKkcWlkmiSO| zmHBU!Htu?52o%mWv^6Q=)|G3F5jL;X@)Nczw;Gh@Pl$iXhP%2}g-~^S>@{}> z;RUbYA>LOb{nlOca{aKQ(#GDAP~KEO^iB(JV!iyLfe(4l6fzCAVznkcdATE=Lw&9W z2^d!j{>M9K5jM8iFFE@W8U5K;WIWI&OM7QGfYrGM(pb@L`SY`AScQ9Jt?v(p8cVuo z7~-vWIY&ABLA)sB)E9#k&`F$t_EL+X zi6F5`>e9ZtdLaAmP)s#vNu2wd0fU$=WgN26cyBwht+b>VsjFDYl42kFo7sdSsaA=~ z1*?*5GI@wDh|j)si7mhI%g9t7eUv2Nhxn@wD$Xk&E_c05Z{X9iB{mwR(Z1%YUFX{> zBO&)H9fvN;U&VS0Z*G~>bTnw?zHnZ7$|Elu06|x$o=tV+22e%yx!~D_J?J+o?_>!h zjk2R`nAzPkIj2i25wt3p22!TrrNb(9@Tg!$69I{rKhS@8eA+pA)BT~vk>S{f){kxB za-a*M{i7SRw2qy;Zcq`zB9e}WWy}G-2E7}T&q@AUY&QhD;NEN{7Ry8wFA&*)~s-;*xEsu*h!Exm#fbV$k1VJ{d9C|y5q~8 zs_3Ebnz$F%TNhkOO)cN$T!faYkL$0ZBv~9>>#`W(e9W4-G1{D?ZKvdXq3VWht?^ir zz9r53=z~mxpkqgPiF0|;&L8Q{imaDc8k$u5zI&QOGBFE$~p%)sF$L zU5+ZVFw=ha1n;fl#xZXZ>+cpbwEk$9fY(`HUiMMED>cVwFwcRX&9y!jL3DcOZ7D_d zwWp#76A!b>V#}Q^_k}G)vNs~%6PK=e7>_v__QAINadtxgZqt;xcOP%g+V6|~SCM=C z4E3|v_FkuKp7ZeSM_2Il($$0|O#GJmc}hvBI9dvZPL$&7yX; z^tlL*iezWxcB&)lZ6a)qFh=>Zo^xOApUE9NeW53H@N`ptknj62yhkZo%>NJ;AUWDT z0rS=BtR<>py->;#t7BQybCyhZCG*4n2TH4pcOC@p-fbA6W$tVyXx}v=pT3IU@->g%-#3(QEaiJgnQu%hd$A&miRhm=uGK zw(G0O{QUcE-%C_igrG0#z=ZpVwG~$!f+xk1CQ?XAAPv$LPxzZFOBnFC`r}WX)a6+* z!Q^wybG^83+6r$<>G4KfAvU{H(Ew!_ zhUCBe!NZRG9@LBv&nY@t^fVBOTS)s=ZIVy*mhN9ag{dP1pa%cfPOobSln$ov-GTZr zj|Vb%9vD?5kBut|daKqGsn&aBlfpD4mH+7je{E#?l zE!>KbkcI%HPU;qUcf7?HweM${YQs@gzxUe47f1QP!v%~5gRg0%=91n4Rwwq$A!kNs%-c{=>{>o*kd2Pwk48m`lTp_r0;V;f zroSDeAp;Kb3TwUcSY4BB5Ux?*XhK0RJeKX;i{tE+ZPZ?JU-;sjf&hx|Jf{I*>I{>yGh_If>KtYI$%d6z~3NM6l?Gs(`_qy8d zt&oI0LocyMo(5(v!gVp$g!lrHpZjT@D!uq<(+Nvo_>ziXCPKQ#Be`{87}|xaf)A$c zzxX5iHwr@LHaC}QhNiG7Hj!T<_|a{fTJuUTVwIID9Ph$UXrU&FyH)bRWA!-;wNOFl z!98A`%AdY7CCDwnBK3k|6fW!_*+xVs63DXFXr5rKeIi_HDBNo4XA$~~=|W$F^CH58 zCPRG$_==HtguQ1Auvh8rm`!2S3ndk$@(>_q^(Wf|Cd8~*!bIRZ{B@%x1uJyk1>$t# zQig(iOBvnorfOxX9q(Tx2gW^Pxa_2@D&Kx+s_+$K*%hI?PZJH0zOo%SZ6?z8@7)@; zCKK-KggU$i=uuu}nnbnzAk-;j#d+zmW2|j0<3lL%)P)QuzU!KJYk8)vcwTnMds31U zTCyi>>DRlEpBP%1<8d}EBYax& zA`1qcv)<96quGN~7#k5@y;^rLja=djO1kGw8XuXCt~;yv?XK&TmVh!~r`mE?YAraa`-t}V|IHuXnauuwmwy5YCm^?rti>IJ}j+ZLJE<=QKZ*5xs`=U9Hc7z{}!?VwQCh#-$<%`r_H zwvPkLw^Bc$m&1?E^%oIP=h5(b8xLh zeVfv!Qk=j&^i)Yjar@4aG^5(u=@EQD>#UD(<84@@6(gyk#5tLzu6|V9RQmqpc%p8P z&jpW$QCb9`WEmu==5>d9K>c{h)QJ%p{X4n_NAVPqsPPQEw@9fRKQFSzY;4~kx|$8? z)g%n@qyG>kmVoh%F|_v|6wrg?CE!h|4-Hr7|MTmRA{5;lETo9l1^d+_vzV@=&s4XW zNzxv5(Ie3TZlhLa5507$QI$kKEwxqxFZw4zLpi`e%bQNaWUdqf%c2eFy#mBKoOEz$ zcX}C%@EVZ5%nBH1?bmn_mnils&T{MZAuM837sxvxT?aJwDl`**yq5YG5Wb4n8mJkh zzL_GJ(PlJ{s21eh{u z_1L~SkFL7|Eu!}F-1>CD@K=vb8ECXc#YI(;U(QYpeo)xeO_K zfyywM7xMk4G^v>j@Qx`PIAyZSLo7;>-jKf%KYV_=ak`_Jpr>G-W19SFmcIdx7*z^FEbBf2$AP8_Wv0>aC45ZcEzo=T;xwqgEG$}r zTm+_3pR?rzdq9jhtfQf+NFUzl?zVd{$PJ z{sJ}n5~^xkJ4AKm{bUfsri4B~JRsKZH>EI_T-V8xj~}jRAvZ$1__5Nk}Em(Ca*UIeIFvFK;MVss52J5p^zecczjyeJ)E5mY7H$a6_RMe zmoxd0@%#+4dlP%1R1mKBXa4WS*EnSr$X1RiG=m#!h0I6@?|`Lcoq4(mXJ%}+*nY>G zrujgb$urqh8ICsX0?JJ^a$sB3;?RwQlp%o-3IEjKk~;5Q&yYGr4E6w9No}FI1yU|s zHO^_OGtXb$>+^b5G=BO-fG4>40;O@}bzFdWoENe@f+WGH4(pNgZpWvxpYKFh#R$;l zFQGSwk*7})pbUIldH1uQw-}rB3uXOXi@mi$xO)kL@ETHpt6vSPvmqb`cZ%wFwRHBL z^4--;aIGFd(y4;ev!fe^{}sN9RBD2_F#p;4* z$7+}X%w|lTv<_SN7~8_^4g8j|VB$iSB2di+QzAXsCpIfCP17%tlcumou%4#Te~lY$ zXlEKmge(?Al?2a=hT$viI z3jv;-g~1@<|KM18nfa0x^}?k;~&#_gt;+Uyd* zgY2)VOG#c}Qe_da#xeeQ|KF0~j{*XItAfNbIe8I?vK~+PKGmD0L_cU4@Fl-oWQJn>9CKLCW)!-8wtyt%^Y*wn6;WxhFWIlELaw2*Q!EZ3z zt09p0)+KeWF1-n1kQo{)GE@V+byly9ZTfB`f1POB4Rk`H338bVb5kEr7qdzI-!yzXeN^M6V*v9)%a$A(di;_;i#iM7dfez6qXgCi8A8&+XN`H`#ST zJ-+QKLuJ~v%U_@ECA}I;1$GQBnPrry8CYw%J|rn#TvOom@pMQB>g_PreKK{lIMj$ zZcr-4v$0?nEDxOWR;N=n5K(+Sa>vt;AQH@iRKZX_?|L~fXxgY(`BWVypx}cZGk&A? zB@=0-|EtjW(9QeclMQi*b5LPf4$isc{*xI~{(PQc%8V1%RVbAT84ZGvwNXM%u z=+23B{EU>$1>Wtd#hLEd!j;WCRtAd~#aikvc7xBmp_1X~~O|Bae<*Q&Km?ezc!N=L+Sgr-70%t-EZ zKVVS`P&O(-8BrOkYIr%oy+sgVeVJ%=uzaKHlpORA&xo{R8JoqXUoIxlf#y?&`(giZ z^VEG1t2S*=Uu#U7d9E46-jZoT!60I-^J)3Oek)4_gnw9c{lqxe6`cs$MCv7kekeW} zbcT3Ey}1Tos7oxj$$BqE=YLYKg58QEBL6t65E-D=IZOME!)fs`n z)54#W%Wu@Yx*3StOV_& z^OU362?|2C<^iita5nE}A{>+REgU@wq(tr|K}JAAC%lKrmIi>+#iEb9rwZJAIXxY7 zk6+;}DZ9UA%K95T^e`DTV3o*zEnZg8EJKnb5&>}x(*eG(R0Y-q&$?_J_dw9wbs)>t zm%7FE-DT?cXdkfBXQX#-V4H$?qK18kRwuj9q$jN{eZA{p)_5dbYNqfHNvVAJ8Wesl z2%GQ@@;>kG1Ev}OW3<%7m%CNa~9zVctvB11RLeM16P`ZIio({I$Rx_t{)-6}3PpQAos220P| zM!Hm-eF5DduOhl|%wDZeI@~@~R8=0WLrK`5V#|4r9<`7etR{g8Gnzs*0y49g;VTtz zUAOAKs4y=sfrxFNdbG7b*@p8y8)HhpzudMvdh@`Q`iIxCmBVzCq3izCu`L%~4wa{` zSa!Wd*Lqp&z*T2JKG>p>^c&&0IbhUV0u%j=2r{CC7=){lHRcEaga zwPSM5opevbeN_vt#}Q)#oIkwHVzV`dWH$cKal?150P_4I-ord1c0h1)|KFH}V)LPd z{H$=xpNAXG<07LQiT0ns;vAEB++}rqc&r8CZa|L=*RYDcqO0r1R!-Agx0ZT8I8i>3 zz1)y=imr1k%XYrlIMJn8^C)kBFZ9his6S?jsOEw-$<+HOHSuwveZTMaU8hW|teMgK zmYz);y13sbD0}`7k7n~tso{~hE?4O>O)~6qRnjb{ShBH!Z~1j z-r14~vcKcPa{R6wE^Vx5Mxo5zMHsA>0;J{c8HQ*7I{?A11q=ubW*zlG#F>WyCd^rC zZ_Z9L^ctTx-4CS+;9%Wy6kDu@yzb z&njFP6=$kXUSv8y8~%8)?H91*5VyTU{t%@82f%bw*b4Ux1KY8+v z=eF-B_qjE_@EhD#~uE&0}RY*E1c zvaEEuC!LdM|)034Cwbq5NkcDq3w(`+0R z@RA+yCPT|*jTiTET2*_;wU%y%qv0$v4%{S*{Czz6_KE zf5Ngu{bYJ0xMj2Edl^ZsCs-aNk_OxahL@wvN=&RIf5R#Et*@sD>!+?HZo5iPTuJ5- zK+{qs-xVN$2HVHjsVYh8yV)HchyUfIU%8*3B~8(-n~(HJsnZ8&&>-)0fy$C8xbjQV$$}d zr(t(Cq85CYG1b(m7Haq40rnof}kN3n*XlPD*4FPfpj;>0W((IWKM z8^x_@M3!<3aG>2cy$B9fxaJ~oKYQE@(Yf1~%Z|ktP`|`G_JNX0eOzj^Ky3TfGzR_G z;vO>Ww*t}*TeFcV+)U>|kcV{-VtL(e-B3$b9*zEMF2UhF0awY?_z4KOvag6A>do9rslW2yv=EuGxA}(hUz{DolwWF<4XZqpzD)6| z!CBZ|+#9g(ohx9C<@F{>0Vc1)8xAt5_@gg8+r9D;kfFtK(i51Ae)j#`v*h#1@4ijE zAJniq#cx!CnvQjXJkcG#1Kt8yY;V22|8-EmFdA7?*%H9qK|GnrZYUDvKMkjDv~B7u z+rsq__g4A)gYtboKU$iuEtOXI1sktTs^o{~uhBo*I*{5Gp!4I6^W*0MXM@M4KI3~+ zD3zpT!~I(P9!qEEDq%BEP5Hny8V6TlW@{4(-|b-MK*)jX;q z!O6vtJKTPDn2@-g-4o5AJ#~ydr|_CLggK^dmEMv@wN3h$+!;&WF$-?piTToTdG9-~?ev+t($d7Wot1fO9OG$qxo5~{ zoMn}n&jhwS%M;ZX*%Wq+7>FTitdVtPW}WpqiMRFg@Fh)SWJZTZA9{LUcF&3!`8D`|OMF z$>Qr>YF_0FbhVMIZ90)tY42fGoYoRV$xQOjebw^wig$>QtJ!EW5q2=}}k1DA@bVeVQC zOJgy84~@N(Q@z+YfFn;R=DDolB{?;zElxHoT`rm>(gGg3PLqIv8dyIh6cPm*sF&yV zQPs;9fu?oLXQ)%UUVK}b z)zt+;MXxVrvz1NsLn67x3#5bBIy$dg#gXqmxzcdI+r2!Ed+QdxF2NXg zsPAj*`FImJog4D8N)Z{+%a<6%_8?)bY&@>jOC76pj7r|tlkn}t5!d6^ylx1fa$8{S4gk^tEo%!fpR`;KEkCUV z5Rf0iwKx#J9vK3T$WeKeeg)(5ehpxaFjD(e5q&cmIvday`hMiKI3{EoaBcP{=GA8K z_RJ!HB~U;LuYo5ZF+ejY5U6~>AHgDO=XtcB$_NWCyvD!I&3@N2wIf@}2-Y0X&h~ht z45~+AP1N(z;*5Eg$WbDihG%6vK9&DkjtYGKbLtaBMIwG+m3)*}3un%7)JB}8%nuu? z_>)GAX&GfNLj^9iZ2_Z^G(+TGDBGF!ze;Xdc(zc}yJ1vC%@#wZuQxpYQv&X-l=hMF zF_N5F83#1K2!$FLeU!?gT)KHpO9*#zr8h)yjei7x;CNQQz|mHI=88!gEymjP!`RWY ztqi9RKBdxjWqs}IcTgsJ0xiIoLacN$C;-SyK#@W?63eXoBO930 z-Y&ZESugFwVpmt!V|sacSsyT`_8eVAj042SAgQmbtK0PV(OTd8kzneZOHcSCR2V*9 zYYlVM2E31oXDxs130R%2Lb)wqmCQ8+gL^SWIXn?q<(&&YZy8Vv{3EfS7V0mRyHxjD zG!hv52J&`rU7O6$t8-IyUyp+#T(&}H*wfVmV8pt#q1UPqO3tYJVtcz5QY7uG{#QH& zniGP%L*9$9ypzs~YIFHu=-nel6Ec~?24DtIy$(iN!NVPr(72QibA82wE0GSXj&u>A zM4ogS&IbYh3+Ipz=2By{t!#?8uRlKWt3wAc!C6FkcirQ- z&EG5N(9hxW+ME$hZxsz41Iz*jgXr{2vT6jGbP8igkgJD z)p%has^N7T|90+m|1TaJv=hJ=6&|p7G92spxa#pDK~%hpHC>-|3Y;vCHkKcYT6LpI zfWs+0DUCr2mC?3YWlPESeVgZ*I``MyYO#|vO4;(8? zfHFuE846cXRi#v+i)Na{Gn*#GagNIg0#u5uiAP>RP6w{-J z3~M-#{MLcp2c9AtH-IoZhKoW>S^#J#FyPB>|8!H^wd8U2f|iiB2<2q2mFfsHE4Y`Q z5cQZ-TM_+66m@;sfJg?=AuL!MKbi4&EV)2vAp&4}Uk}JzOQWDDiB_dL2f=Q7GWcHio2F z&j^48db$m(t-#pa#omKfN05|1P?)9JTRhnYugq&$P!v! zfjf9JJ&nD+`Iiekt`m-NgSi7Uc)vR7PvWT&5iu?BvSTupl4U-o$%{PfPpxaOoHi5jcQ zxS!rI@beSBl>y6Vazqd9QqTrb*$-h7Quct3O=*udSz~xl5x`EDG^Yvp~?_`0(qk;{5w- zV0?P73!cjJ3b7=4q{ooN+O>Iu?siAZTy=GI{k5x;_3uw$>hzzQ52y53>iT1PhX(}) zmZ8q@bqk)KMHr|rm{qO%T-As{{ir>nVGG%FLn?5r>#EKh1z*BKjl5? z&V*ujFXVk4-G%n1J|ZRZCwQEp2G@{(5o1?xU*3?0JUav*sYvcM7SHM3Bes1&JQJc9 zoe-2awmPxUEa3eP*cZa0jbO3(S0ogVy0D83R$18ki zQ?)@_ptRm{B6J1NmRuoMnb4#ld7)szIRqu53c|^ej0KDU1Z|4p@%L+NMo`$$^fC>k zAyezjQ2q29PM&go+L3)cE+?bz^gP);hUWlnwmh2s710%Msp`ir_4%l%AXoL*p9Ct* zm&Or_|2rSq@$rdjgb2prSO_F}WMS@aPH5(}^V+^Y@|Pg=O1PWpJ#PDnCN~bHOwXS% zLw9La-;fLKDc>K2NxqyORoXsUkCli&TtkmA4LDU$BTxzvR$+R+(RSp|ZG~|xx~!jD z&Rylo*Z6xwRYZ0hTAO%HuA{<*IjC@=2715gL$VPQ1fz!lxClwvwx#t$e+m+P zs2%hiJjR!zElhQMTduE`-SK`2ZfGXu9dP>c?KO}MdK3zzx;t0TY`fZaEfOX_l|)7! z2t^3+wPBH32qokxnLWrj^%;ICd7j!qZcKu*)%GHXs{g_};*N9tuhJQ!ydi#<3Dj)D zIPB>gl-0u}Jr__%pnw7xpn~c;9SK%UmS1|RU)lRy$fna;1)=s&SJxS%%B-cqIz z4Cl$P37>9ghB(UAb%}{y%jwEdm=pvwWPjWZ36WE2vmZG0`184>+$MIIr5O^wiQE zEK#^;EYG|;NF!9=RVag|Ke%7$6VL2umgO}5k}he2mQYOWHyfD7+DEE;+7cc<+V(+j zN67Mbmu=pr%hVNl^-TxVx5k*)RBXT*e!e9q3wt}{;3Hq7HF1KA3z?AcZ6n0z3D6Q* zMh|5Yl%$lc*h{nF=hip-F21zBg4s}gM7XM6z%g@T((JZxDv#%2<0iH zLx~Ag){C6>6U@o%<+q2F&*ik4ZKeFO*I>2M7mlDRR-AaErj5{sk+C z>MVz;YE53%>NBoK&^|=XuL#~fYtjI1PWNV3%*;c-=k?J(epfWo6l}&_6Oliv<-{Hbe^Mw(Wct#`*QYCV_YOxEgj)nJ(MV5#>nlyG3)12m9)fr!>c5K2Eosr)*d$c6_{ldDq)Dn(Lpkd@iLCb2m#N*00jdm-aZNjSXn>o(-LhDe^h~ zJ{6l*#u?F6GmeE{F^4~jKPIQ8pHF?f)3jQ%hic%4MN->$CgX4p{kgjoN>|uyJb{&vlBvPChozY! z!j#5wQc0>^1nOu|bar9clW47v#t*ujP80%&wB;H!IB2;N-GZqsnrgbdLH*3KMd8J1 zSqtw3lWzc{PyFCdZb2svEee2w%sT0%WuRDQThIXlwfn%bSvsAoSqZ(Vfh~YQhq&F+ zmLJ-PQ(Sd@DIW=!O|y+)+DTOC59)Re4<~69v;9aBjdMo5ZnYD_N;x=h|IoSjIOM}C zZg}7bQV>Gp?tIl`PqZgdNB-rfx6bm|Qv%&QMbhWXy{$>u-m#2D_$LB9jO4Cbr7j$c zxI~^EwHdcnzkIVK+Pd5`MdPBhb$uKJ3cc#m1Jh%l{yGkgf)Zw?lb>#D#25F!n|&^1 zYVbURr}S;WK}9JyY-zAY68~Y=>f;#qsfh3}VBd8Lta&lYSW@E1yJI63f*G+x^U1P$ z^}iw0e7NO6KS{Nqo(%3K2Au2KkH|EYP{fYI4HXIHi50y(Pm}!0ThK-&V71)!MXUjk z{srB2RO(XMx*?8*(UISNi!}G@6(o8s?2<*PZTm^O{qR>+Jf{0!clR*;uRyKCsPMzT z`DVD~q)HP{FS76Vug+m71aEs>tDd_$CZB9@xmn7{asO^;ee7;ntaTv}BZjMv&Af;V zl{A01n_=TMx5;zI0i^OkeQblg5KG@x67P!>y{M2;`>=ZQT$i$nGK5zEXc9i}-8D() z${CE}CR#|OU{S47DL;SS(C0Vm^0-s@7#FIZP#zTY5GRSZ(EIa_8z~i$RlMsrg=!wT zNqqv46duXB&hqV|AVAY@L#r&m_HO-u2z&FeB-6KV+@>ij$80kz7n*U*%G4IqT$yUh zDKjcdQ&TcC7g92JMee3WQ&VR$bkAJHax;@60- zc$3*DhM$;SQtnsj!MSr^@}?OKg{lbk-PWmfE}Ed+$cNYZ2plD!n;T^;g}3si0QJCb zd#O|DW!zrb_5vkZu=<|RpPJK|N0UHGBY0kgyb52H+HqJD;%ekqZpz=&y~!I)KNHryid;NhxFVfUOvQ;5F3Z z81u%D+$z!4)mT~b_44JfR$Xpwc2}}U?A#0Fth*PUY;mi9bHz|6VAOl*nMZY+JiNKt z%gr<^5C3Ihl*ycChtovUy$&p*^B8ue?A}Kk@060^5%;#DSp#EG&V58~va_;$9u*o| z@?jkCrc+U8`gu?va$HxK$h6Qky@igyr-(*>lCntohIBjZr1^H1@((%=9r)9zWt|{Od5@<=Vv4z=2VpQ+ z`CTwF&0da@Y_0cE-6NteU!T(qpY1C>p`_%>3AyBv%%%nZQ*qIUIii7OPb?o|lB5)H z*2*k9ChCeNDEA08(w2u8ICg6V)QQBqb|=PCG&mK;HUYBSaWJOdtPyR>ZfJlzYWl_e z)!+F&s&q*s|1FD~J;{>}&uLE$S?smUuNWGV)<9?dRff}HIo|ET%ebW?E*PC=p-qOD z(q-mW%FV#Z@U^NOzlH-Fsj^_>=+On*I4`ZJRC!dDVWCTz*H@qP$`7e97CI&_SO6No ztdN?cU3YUH)|Is^gFj3*sbsgfS{j%hVF-#ITt1ms!|-Hzg^z$CM=JVtWYx*1u3AkZVyZnV9zp1`*4r;QexKKw5 z*7}|t6HPC-$;51XTOs#evf3jn;lbGTceUmqg1+_iWwqgYKCmQ#O3uFHae<(E#W`h1 zHY*KGgM481V)ZR*vbw^ZPwi&=NV!u_DI6AWJ4mx_KUJ`%8w!sN2lt6ZBhcoK0G=cM zCVNV0qY9ISOS_^A)XX~#3{@;S`w^QMrmT9uVu%u@yI&o-_s;zoE?n0@>RIMK(HCId_ z^c*&EzNu|@K+HL4=R0|tUfX`MWIX=DW#p7T@i;j60D8W7C_mRaPn`O zB&K}!Qf-YK%}`Xrjq$IDr<_WP8|R~?EyS8Z-;&!>FU>f^hve)$f)nDU#JbB~I#kqyU$Edv%yf7qi}>e({( z7_C(+X+sl!zrZ^kx+Pnzb@~IUuAPnMVBdfv$*(~S8tclqucAli)Y*u3#MhFK`I_#v zw8Z611|a09=b5VR*X2hgFXWfvP?Hvf#x7>v5KX~}%~1~D!Sj*wgdL+zPL{ObKS)6eNBmpTjHG`krv zZv&XiL!;7a4y&5_o@af*1pUBZ&1Zx>wue$vysUbm9G)cHSb9@G$r70SH@5XyA&Hmi zmhMg#jXT~w_)Sg3Erf1#DEQ0KZxsjh?U5_n`@R!O)g*W*5oB}Q`L{uD`5)qAbqU`A z_;EwQ;dvoE=Vg8YX7n`*Rp}Ee!@g?CmYUykhwof!$icZS)>3ql9Sa9jjScd1=HtD_ z%k^>g<0|#m9?G+vT`7gLJsnfPRYMX&2rf|-Fh!u%L;CGh*@nN8{CAL;t?zk|62IL4 z_05--J9^uQXJHwz>-SVHv!_Egz9E9TK}#05;@&HaYuz5v5q(=W<12u8LiWa!267l! zuvHo>N62G#g`TpzT(b_igTxQ=X_i#6K z`C%mmOlwJaI)_z6j-rfF%*oVxoZa_fW&kQVWqsl6%N|M#fr`e5YLr;X!^25FD`5vP z;@0rYcnytBDzt{5xh@GZ_qvPS>R8Grv1XLSp+O&cEuR6eVub)%js&`k93vptSR77( z^e_hdWJ&mUqH7KPlyU9uKLH*CB~m5D5Le``6efr{*FWdgP%>2zhsz(tb!yuq8ktW2 z@!*a>F^;{9P;c7simW5^9kbsv4q!l~VNU$W7=VlqXddfb06%xZ_a`;x`dV5vXl(Wj z!y9}AV4WcVm6*~D#HcMPB0T?4Hijz>8vkN)eyWwKiks3>#u*CAHXh0GXY)3FQ)7+A zep5?8W)~FvD7uje#n`2C*v=rJFjOwyK2u728b}gPm6M_%lNIe;NK3hD;-QkVNoL&Q zvFMtAT5On=D_yC?P33f^2cH;PWG4O6JeTyGJC;W&SbPk@aWUvjjEkNd}mHpl}Q z-YoQj>5sf78OvW~F!Zw+YyMHhgCuIgi|0cGtdGv>mlm%r1_wv*b^xAT4%TLphv4jZ z@L;qQ14^&s6>II*X>M^hTpg5D z^cxgM3}E>)mJA8YP+uEk5aKQNw!$lOW-qzK^Q(qfwqUK+)AqXJy(}p32!dPN%-2Vp zX_qO5eR?9AU4^~Sb6b**vbvSeVHgVM;#F{chnmyom|)R~&Cinqno8f%@~}}M$Vrwx za&qy@0;ezPv|7D3xzzHh1xPYj!f0OT+KvM}w+T=GQp{Fqq=XefVq3YnHh8g@eE@`} zVF0|whXka1c0Q9{7m({^$fFeDCFQ10MfneXJdm~mJDB)w9>O{?7t*nRk)3c)iTAU%VtfX6VB=_2Q2MI%-&zY3{l}9JyqF2TtYp= zLMvijwKfKu%k(Q-!-DF>DhJ1Rf#|o0R^8tSL-2m#Xrdonh%h?RPgtf3g zAK~N)9hxRQL{t&l(-Q@>S68C3@FshMuQ63~`Rnu9-itp2|I5%4)nlf2?Gc^?StQl& z*^xx5AY_m6p-ZC5&zwlK1Dkf#_p;?DzrA+eQF#$ttPtE{^?8YOV$yOr{x2y%Kg{FV zRMk+MieONL4GSs@eckCJS&OyfdDA|TYTv=#???*cL8#h{JRq@k>iA`lQl$sz#2a_0 z=rNJTeXO(?9+y_PO6`FA2Hq5Wd>JvFue@=`;OUK_5l>tQyOqi?j^YFv_9wn`O z{Z?%8oZG$c{cp8ct7g_i+S>(?1Ez|&tJt7OS4qiUo-<@?rGO*ByoI1+-}PLuIKdr{ zYyyNNpV~x)?*|byY%sx9xE!Ubj`CB}RmYcqX}J89`n$>kjieF()%rq90`KkLMz|kr zF={0E*pPqkrzTlpYcboq8wV~fQfKRUNI03bs8e0pb;PhJZVT5Y#ch#9e9RkBriFbh zsa2SGp3<=RCT)&E1T>IHIvYGk5LLt9)LyXXuf{i$tcOQJGI-dXCgux+ zc6F)=Eh~bYw>plkN08o;&VJD_@h?4fWBDVU5qwn&j_}2x40qaLg5)DWmxg{}DSo@r zAC&D%;ShYMppI{9cHOIfOLjOe?L(xqsaWsW@lcT;&o{B4N)LiUgrOp9g)tP2|5B65v(1_=?F45ocz2O^8O0H2!-n4lCyH_Hr_NRG! zjv3n5JM%OJ#Nv+hq*D*8nB47g*5(_o-JbuPWw_StO33DXm}k|=o4s@wHriX0S$fv< zq#NbbuQa;Wn&?85FyYUavRp@K38T1teX#-T0a{92pmh7cic976eGP&m+q*Ezxd}W1 zXXH6|q_)$VS5DqG&V@P}zGl|#LIx^{Mu?@>#CLb?{Iz)VE2r+`o|Q+T)xk+x>f_1K zK*}R@(Zt3*aoGt?e~>!#GZizc1JkDn!=v$9N|gdmOdxhuH>HtR6BsXeYk2}>!o^q3 zbDx_1=?CO|MDOAo5jTu6neK^=aH-v0+jrG9ojyycs&T7)Np2f=iHW*(TUH_E z25)k#Kkrhq&`#{%CFzJUN~WNt)GwJC5*3yvsIPN zz4(He?l}T4O zl4^|-z3LwFK}nFLmHv5SMAmIdgJa4((JSrH#1AV@D&Vccs7FWiU-=rsZ^ujnKXmN- z{A`m%nU!Zp+U`DDVP^X4RN?$hhAApcPD#h7KSgXfd8sOg@Kq)?vPyWc@8rS5%xFLJ zK(~##G@w}rj^&Sv>VH%>gc(9U>2 z9?-S)w)$gSxh?WW?_*H;f4Xw%y`JL-twG^Q-MMHtlMBRk@6KHD^E-yhv5qv}>`I^{ zKS#u$wCk;UQXUvX<7I$?MWp(Rf+eoe(!lo-)Wgkpj9&KWz>Gr=EfGRzrHjD$nVArI z-@%ZhfhBSvKN@p=dPGdzc-+D&_yKMOvG46*h4BjGJzey=IZadJ9v6aWsXEqMQiES# ztbMqGV9UaC;cf7*ps_801UJojD20taW}XZiPL*_(Orx zS26|L1=Bdon}7S^kktt4(2utu1R88*{Q)b4XXqUVOP&w{ADw`UhXPTa>GF^@p!!2( z1+$EiA6IONt9!C+fLg%8c(5fKwA;saucTsIRaijfB)?kea;(3g*KE2z_f)TVD&B0d zb-rOqXLI1&&R5J4rstf)?>dop=5j#&bf!l}Wi|qL{4Xikz_Z3jO`i}?T);dcF2 zpuU<3O57+aKws+K3_Ex%M@}(JVw)C$70+X8As?Qxgo0^L#DBQwDW<+kjY3* zF@eX|kfpWg#=Y}d%~Bx2?MpR)Y6Cs^50vMNM!W;yUj?IYu{HK#$H|npI=nvR~in#9`XM7VZVe|B8OVhpb(Cr&D%<%0T_Ru;!8`4U6n`RS&h@S z!k-CS%U|3z-`FvZ1n#UlfVdSL<+2qdP3=g$CnkW66^lC|FsdEswt@r?qcd9Zdn&=8 ze6kfK3@P;SS(HCf6k=zA@ahT_tjDCWMUIHcz6&`e_-C>%EF>aLLJO5VU$X^Ep>p=_GzL?N2RW&;yiAn z%u_wdPDcn7)9vY-0+uglp)@W>ySWK24rLW>07NzXpA(vK7YE9bwIR^VdfdryCtWUo zUZF+$dcF3R&%0`^v{z4_@Ahgo`Xad(B@Gx|>f5Pk7_43JNSBW;QM>2Ca#7vM`e#F_^ zI6<(^jLD=kBPB!;#!5|lkj9w zNhdML1DRwISB|_q0B@EhS`MMpO~Wa*5N1%7_L_A*;9#L;hR_etIZ4hUs%uX5vf{Gp?=Qcd=Qg(k!}(BcE!YYXyixfr!nhMtFb z=_^K~(>^O&8pgJr4iaz#DuN%`lOX0GJ?qKrk zMLI3KL#{#+hz}ERj|vQ$6~8GjCbWKl*9Z(s#%xD?FU#(m%~zPQg=qv;x{s=)NO@8~ zN;Zq|q-d&A+P6YJJr)OmO9r}6?w3^BQxbwPKheXA!mGfys%=I|{sC!DQ@9=cNDSPG(h~>fgsl*NxEQkdkrALYJmmT;`7QA`qu?a zVAqEumduyz2oK3tWJZl@MZyE0SD1mp%qj698{X`T%=!!|pD#M$5kB#xIS*u0Cz@tX zTh8LnVp1f1m@K|yGr7|inPAluDK{KP4Q9X^D;1vL$xaHJ&`QGFFo5PuO_qBJWX&~g zoNPYH;{Bznf|gQ`k5e8xfc<&PuF^nypJP=uxEDL5$gAY;eYXzlBj-Y!EQ(Olz+;QJ z^}B!Lw)a!UUV=pHufY+Nlv_iiK?DPbO#yVmU<3ane?CsD2E))X*hZQ>sw%Y84RRQK z6Cm4))V4q^DKr$k=m499X5l{#n?E?WDat*VhfNlh<~gT3^69uLl#|8yo;bPp)kz0* z3gv93_wZwMxRPJ?2zqofwQx~1ecS9V=*hg!uUCNdFNuQM&w9ulRw{0f`U zJ`r^cq;ACeGxdBwDZ}!?xS4+ESLa3;7tSMyo9-70l8HqsCN`4LLX?+@C+moAim==PeS<}^5+k( z=Z;%FvS2+l_(hnSQ2FNaW{&;0SbG&>_b~Dv0X=6=Zoa)6^LH@T1Zd;p74fa7P!%w!m@?C8*r5)I zUtRxABD@!8+xJTyeP0vzo0_gHqy;g|-TD`sXRx!6#{($pX3v|to!7c(pge*478!K4 zQOUVCSxt1Wa_$u98Q#s5JC@gRpyQ&|8c@wX2hX;!+tPDw+JK-(vm1><08Df?HTbq! z1*N-oX@KG8ZNO^dSudw zj0XtNRG3V4fL?hEF2_>yV07ruEhyx?_tA ziT~VQGg%_@w}%o-@U@w-ELSumI|B}3g`OwZxp`gUaftE_%3oy%gieyb=rP1QUu^fiijVBYb^45`o?gnTIv(ck99N z<8T!KWL4p1MhbJ~9vR{%E1T8ns^$rn$)`pk`{6jLiBXhGsL@9fs%BkF2ur4VL=}=X zx4kod)lYRBs~?j(<&siW{LJfnp7^Nm7N6bXIpdSr4Rsu0tXOP`dOSA*uun-97@uiL zPG`M7jD;PQ47T(i5g&$#zmSIc(^ua-L%6*L(83;Kr!wsUa!#tW27KiQ=l}X{UGTZt zj^d3~k(BTEUg4GVAk%sEZ$1A{NLKA#z|5dx>X&UVX?zMOJ`noke(PD}ipIwU|KlgB z(eGP532;>{ny5hQG5#R_Ur5X0S1`DazA?mjk3R&Bswhs?i{bj$&I8m$Wx(3Tho8PY zoGB$2(rXGp+v_Ig`pe_n50xx5$AyDunV2|5OM?-zvTMIAJ*iuCe8w=} zdju@x6N@iMxm`_w{YQ{XYH3U)@Mv0`%(L^|ccjgPi9M*-FX1c$UIM}k-^HpT7YQRK zh1tmt1LKqgP6YfXSV#Z*e$02KDdT3P)`;u9z%8MR{}H-o2gq>=SSk~E<9lZEDNf!% zqoO2>UT5ilf=jrL_rci?{V>}ti)z_nnwVGDmiaKipV}3)}E4@@X$`!&uzkV}Qfk2Ku=p+-!J!k&EwXm4`UrUg6_ zcV6ZXNLYBlueCd0*jDsw@5nIc_E2YNRKc8w)sXJIbcbbSXiDA%Is>*7#Q+)>1a7~) zf4@o3eIA|8rOcK~DVgau;kg-Aq%M^XSPehLOxHHI(Iuq2?sdLWvg2}ENJ-bhHQ>_M zs`Cx*ZJTmESuI0%h;|4+>Cv`NT&IHMj{Wl1CLPOGru~Qc)ea%|Htu}<$FHZ#M=$Fe z8C?2uDCW>nbK)!UBq!t1?jLur#0?^hm!ET&rqt|3@|in&$-S`>E)C5f-VB4g4*a&J z^Br461E&#o7TT!%O+)81IH0vqqI3>xJO4MGaB-j4LVHPAlwVc*g6GhdJhW}KNzi4g67Xoap=u$6Iji`j-SwiwCK-1rT7VK z?bX@k#G$li3?>Dv2ZJbzPbEi{Z^O{US=qBDrQwY{*1}3YS`9w}uBXz=cYWdncP(B& zh!`>RDIU_2bfsJLG35w=sSBQX4#mG_oB>*7iL(rR*B$UhUW zFHo{&-e7}SXapOr{7(Tf9eLe6$$K*dlM?<3sFtfx|OZ4*6H8#d=~7NC3UU>#;*cXni%xmG0-{8-imT11yRg z<_JR0`wwK8HXSn}GY3LJhoAq&2u;_7O)k>><^x4WJbdG$&u_Ku<&*oD0vFF0O!Ix_ zL^tbq_0wh%Kgbpmwfx`VceEq@GiLIK27;{>=A~CfxH##atK5ka-hoS#`k@=9n^kjx zEyx0s#XQ#B)EQvLlV@)e-mVGh_l15u_vi_651PBaGi)fbNcr0CHS(H`stjwsaJj2! z-C`jiIqq!f5vQD7l(hUdAVxP<_W^CwQCz9-D+gxRFKOV>F^_MyZqW0c zK{xZzI{!?YngKe9rt&a2q%MKcFgh>&_4^x@nH5Wn5}CrqcAem7;|KYT=C(_Cl)N#X z?vOG_-IPmCAMg}Mg~AnE3RG2~PVZP;@?5odf8Z`+oH&Rnfyt8Cs5^M`XzqCDbYAH zvDU#@MdYY-y}4P*c}mn-qW5ciYX&A*I)|Ufe*%xOJAZ3HiL-#(HVMRq-w6!Fdslaib{q5wV-VotHV<#nAa&s)VR|}Ppb^?E3XRGA28E5p8KZezQ2c5Q_4Gd zC2yQBPSkK*nKfbTHbmQa%o5!y(QMpXJq-gF%0l}2q*NJp%c938*4*ASL&T2kXfN)h zC~@06Dp#9maOzb5#VMB25kj})2h@=77>nAmn>o%(2__!SthI83*Y_918@DywSb^l& z=(m)&byk4Q1(9>A`R%{&`?vk2yPOSpwBuSEcFtXYN}?awPpT~zxM%7(KAm{7PZ({d zXA<|v)j7&Y>FwK!PgdII(*}FS&h8moPRe}$J=@Qt-U z54$uCdpK;~d?)p++exHHbKk4ng3KrQk1s27FC>R_zAEm&@&pAq|Le4Yi{}D7M5#2F zu+qu8fz|i{(B#5-k`9htl%Vx!KXTkR+VPLX20K$K0IApF1c;H`b(^>)tDI#;f8X zI4|z2w-F{Hc2@NTqbEU|7;EW4}#HO(eurHtOUy5jH zq$rY#0pXjD9!OjLEPM#~;84uDZgWqCwp<1=j(HQ}}5L^c%pr7O1 zbc8`olrbOsTwrOmyv&axBqfVQ5&;ea_pZkAnYKmDdLI*#$8R0_<3)TkkFBd5e0kVyI|Mj z#jIc{BN$es>4Dq#k#DdrR=1<H|~m%%MM zRNBX0MzGA4+b74dYd$EBz=H+{YX3k`he)6hTpf)<*SDw|%-2L?#$D6PWHy6e6OjHk zgk+p=c;OLDwb`Y&X_OUh={e_eUsi}H$KTp85QS*w zRG-l;D5Z`Y{nOQ%b$gK zk9Yd*F)9B=HQTm`&S2f1M(gam^73)51#jJX5%-+ranvdM!{lXC#wYW(1?c#)c?)r+ za!)r7AS~+~$IV-{fKtjC;ig#sbR1e0jecJj+uppM5aIB530G>cwYR2`INwgJNXwbp~g}9D@Ir)YSXzlVMuQ6)$E>fw&wrA8nx zm4$S5z`wfM=zK-KJ#ZC2f+qScy*k(0I@jxx;&#@mI_1eTkK1hL!@K&zWox6=$h2l`+P1tB-!J6W~V))AxH##|_Yup@#8+J}$9 zI-smg!V)Tm0dOq?bU6Q+A%?dgD%q^uf%;~%Wc)cAL)ZI?_G=>V>@Z4uIjm#Rn{i*S z-q+gbba(D;r>rYYRSl7-r?)@v_d8i!Hp=S29xfcf_A1b>I4hun_zC|RzeSY|COXe! zCFNuK2Cc2|S^!dQELKL>3TA+lvAxwXVMWn|CIqUtEv7Xp2iDfQx`vWR;RxB8ee=9S z5)-~QT5upo$z8iWU?JCeE(b&i#1F_lDDeXoe@m<#Ot||S73kDF^a52LhZ~e(HpQgt z-GqV$l*cYZlc@^5Qwu;YKOOkpAmmk z^H^`q?)PUXMw|DWJp1uz<23ZQ{j!LFJrnEOJvlwQf|I2hA{?KIji4H`xLnpcwKCna zeSl4vbzrR@7cR+XD|I;_11LBIR4k^IeRGGX$L0Ct>EE_m+LGdpmQ@QZROAv>cy4u5 z!-LfJlwwXw!B>yD$ZU_yPI~iCLywlTsx{ez56Fa9o>#mezahwvt@_D*5ag}c!n@QT zygTYGFizchS+{n%XoBdH7n81iWuGK)n{iro@d7Qrif6g?|TL?EknB%MmTalQz8! z{q?}hQ$HPuIe%Pd!6#wcAvhHq0+lMu9`#53FZ%VLaFPF5B&t)re^5OMN3O-i2@xMp z*4064-Bs!C0)x~~_s$4+RZEDx^d%f1u8O!u zKNuC9SNUqPM63$Z-sSUO;U%v5G#c1&7Vc(`?TD9`uMur^M8$Z8?*m#6?4`((TCWwY8iH=c|OJmGGZFDd34Zwtt(B_Xs|c zL{-fK*BaKSuKp1wJ;!W)SxQdzPqyPNpVt&`DL*IJ;pBT;m zWU7AuQG$$wUAfDH!1{4x=hj*UfTIEEwupK}S*<)IENsaL*wL$Ne}UH3AYeb7NK_p< z)?Z9JcQRzDktl!Uo<|AR`&;$g$LG@7!e9)`>859^2-zVR`u7 zIT1jkJ6~H=-ke%qo|;z^30~bp;MF=c2wqH8&d}%(%jCN)#CbUJy~8_r-!tNXjqAAL2r{Gy#omG4+rS3V<#&d|mo^Dpn~ssnio(;{%>Z2YjV(#sk9 zQ{U4HXNuB^CsUxT&^O23<}Hz&VF9M#;~iWxKA!MLCFZLyN`mn z=_^2{?fzlpK_2}@=c@b2!06x*{>w!8pFyTv3c?1}%gf7&LvrTw%$;BE9N(GSl{^1Q z|4r3L9H9z z7SUD<-fViBJ=&ITJ(a9>UEsLtV^3>@TBgclP}$_oqOgAdk<%Z5Wf1X%2jKjYDt+0n$ej_2SpAR6Te5zYUZ$wlWZYqNhH! z&7yMbz5}n^V@6R-4ZKDW;oCZmrx@e)@DLya{g5{+?#_XLs~*s=yEaDTvh9GGd z{@$q~Or~po#b7kcr{T!>XGqDP)lSb}cMt zDkkD|5Mb)1|F3M>-~W>|}s9^kv5 zCRArPD`w=ppvW_?x-xe-(+SlDJaNObDneBaC3JzB6UNRxuNsbLjz*n&2j?p{$sSTR zG$DRsWE?k63O~L+bK=N5)zUCvS8&=YN`ql3sOS>UcR;IU86UR1(?x!quJIDY5GvtT z{Nl`Vmc~l-q2A~>!IwJRwlWl6r=x(6A3i_WkVeRKt;u7R@v ze!)GS>9jN#)ygGJs&J0QGR#NT&B2m6t?!v}`zneidGYwC4cnJ*hd#?d8|6&bWq|C@ zB8U6|7>c01?Fid$bVI^A0SL;bU~2$x_jHiaC8EwFy$~G`LF_wnu|%6vRwa)>-^E9+ zOGItlHNQ~9StTbitK`GY*GEYd=W?HOTJ98%4>6UyFB+y4b(}?ex0(Xr)>RUf z$>JC7?$5UWqn;~Ryv^BecAe{TZ~CR`3EJ~?WE~~2Zh^^V6s4nOSRr*ntJP`521x!Z zite3lNOoFtqmh!}WfSmDw3O;SI>U77u6W3m*mgne*6QeiMLmj+=g@I|@xI?3^iH=j zKE{~^yku2H7_Jo^)5{@7YCd4}3rhIc1O!ra26U zSprO|>PNDmAiWcR!h`Rv_%ld%kpAmz^l-Xv^Qufnne71aWNJnEd~;#YW`eoMTvw%k z@SisN_%qLz&wH3_W+(Rcl^KgK)^mNUV;`6J^JbhFLSK_JgfPLq1@%+JCwtCY>HO;2Rqv!cu4z}?6uk4 zqnw!%*Eg4%n|y+vJ)hda`hJq{UY)k4%6@O*DV>LHeOvtc{WrKU#vkJFpc9(j|*gVT3|$#Iyo znVz0Qrshm9gcX(k{^WsRQ;WLBIZAU0ypjk6&uGCpE!nS*yyt)&!lWDZlMh9&W41%; zAO_w`U2<0zvHm$xxvL+?Uy3$uIv-|VUQr@oqwA^46ufOE_}gc{TMSW%liJHS(1hO3 zNyPPX%ZdqR13hl^$!2)7+gV0)E~$CKt)h^ zD3TB>kak z;l^rxlq6AUC?Q!kpjCK`PMsw(Unhrb_;ruK#ezMw0474el`6<^xqasSm(+}Wydps3dBLvU`>-CW}TFRC9i}&6hZ*0 zPH^p#O8!z6<1Lha6x1)CdFta8e~*KKJ$b8$GCeUor=u}R+3w|WuUivyjBNjqxSq1Z z*Bod6f>&Zy9U19a>a&b_kwJ-w%YSsR9vf^^Mx+fv=op2O;5fVnKq5a@%6_0{8?05O z;5T5F+nybV_nN0f#wNCRM!MI7R6qr)O%wG|LMQptX@699?f*dujLYi+^ZH~{yc-qd zSNRPAlg>3_k8;;JW=>y6ZzEsEgeUNXcv>f*26w=k_f_f0fI50pgu*1~F-)as^X(L( zf?1njDxkUfcg9^93ON)n7#{JM!>_b*i$-8%p>Kd%RFuA!HMUN2dtvvNo#n<~vVVV7 z((FhXC@*Jt+3|gC>SGzsJVq^r0;3;i3m+&#pbxu&m=-BB9^nCvW{vTO&T}|>1vD5= zNoB3S0oW3vF**_cTM`G=$SA0~+D1X}Ko9Nf5@ZknZvj*vf`;aCZRusb3GM06;$~t+ zWpA*zLzgBx+i6I_5#(Qdn|vVBwVBKylqnIz_}kE$OTY4A!kPRqZhEnm8)=WrtGuj+ zK;n#Qy}OlqaUHjo>=v(3F;>C)`J*AoVu(fz`b$^W>LsgD3K}zHaV!Mz|A#Bs(}2Ds zr=C5c3hPr5aDX#_%7|vE4otxix`CB&s$g~9=o>;3P<||_V(F)>Oq}qPsK2;v6?F^b z1rqdFPUzNB>Lw}h(H#;866w+cs7BVtzPf^0Mhd5I)*78;`7 zz5DL`lAry0E*q~!ze!qAF^k{(166Shc=&Xmz)?4jUHZeiczCR6_n_CO#opf0l51qRvdj_qT6Hy|?k_g$qR&T$7TxFv=KqXcl`5Cea`3%_e|242*LVZTa_M+!g z{1u)s=>0dsKL%zGStT|(3p-jeqQhD}B-PsTUJI?H9jl22L9m)IvQS09gq03?0uZRS z_k?&f^`?|^ZOQ|EI~(7QO3kz;dy+exl!wEw^wg2K9oUcUhtZF(xo_Y?n zZ-gX^^d)ooEecFy%wua5S_8M6Cb@gf4qiaL{-*XW&;HS2>CJ(OKG)b0r)lo^z>!9N zac+b+mI5`f*R8(vq~u@aY0&bT9ZK&b9wELc4J=mKFqfIj_3WD5nn;f7&@yNz?jDCe z1XeWZjcThhf%25FwKHn04(=4NTTtl+hE1Ejqm5y&rSz4`%XBld(K+^qCikJ}FlzQ4 zR<421nKM zs*nNDSP@ci7NLP3gw?a#^VO?+mG(f#jdY^jS31J!{{BJ@XW*uIg3_9<7qm@%o`e?d zj!qN!w~&UXqR+x`OUW-?CeyW7f)qViR`R)q+miHrySL9Sq$3aiVHD%_+0^;;AyI!! zNG<~<3n8&koxzBSbhmDC`cIfxVuJES5qdWN=k5rnPF-|Q?U9guVpGKBUNf^A)p1n6 zDH~MJo@L-)hb=9e^Vb1%k?qB-9A-&JGb4mHb-O=UDebEzPxd*eDNSXC!i-7t*7QW= zYMgca1SP3KnzR(ybfAz!sL#=8Mx3jqn;p(O22ZMVoVvqJJW;$<|I1BVEp3ca)0wi_ z;d-*4lX>BV^1${j9BPhBMpg1zf^-)%2doqE{7z0S*$Z2# z0NAxU*nM|F!CFI@2{;K556wmR-JOL>WRFrEF)sob68!fB;56=7{roj|M?y8wKB-@< z?Nvrc@F4Fdy4|Tl?rK__tB$k|@fFFG?1+ExAaMe?Dc>0DwcxUfY^Eoe%;UPlhXngv-4jnBVhoH{*3&gccJ;7z3U<0n=F@%(cLPYR| zPR=N6MC{dw{Cnb$rknU@_$550Rhjf@sVnf2wlA|5^$Bk5RErZbwsU0?-f!!exX$ur zl|7y^fqAB};hzgzFP-wnT56f0Y^4rv4iHwhO#8YVqB`KE=BCl5gB16ND-+o)amyXk zDqt7-_jH1Bmbt|myTRv)Jn(c&^&n)4g<5H?UFW+&DnKCCTO%syYQOuPJ&VHI`r230 zh@>)6}u3v_Xc!WKA^T}H;o#KeS3 zFmZACX4IL8sj$?g6^c-WJ#KY3d2RIdlPtgfrrUI9BG#}Pd;NDAJWh$;65DN9!;`kq0Jl1vqM-h|A!H@S*a((mf?E| zTb95?fg`=ZjE)^L=MlGK=oB(c6^vwlAk_mtKtrm_#Yx8=5aHHG>HDTOh48`adW2`X zMMzaZWEOsv_(DD^k$VBxLe-Da7+?i=Z%H4~0`KSxu0gGzwcNmo_0Gh=#a*9)<30_+ zaXSv9&DSDBz%5LA0GRBgxmP`xJslVfKBv=s2KHw;rxmF)g_f9@ehIC)A(%<*Sbpby zs*%rdg3*j&?H~USCr#~~`nSISKiH_?hdX8-$tnMp(5F*-xF{tIrj{wn^Q#(xCr|Iw+-`xG%s>jY=37Q&W!Q%dj6h3A6ohtptY zLyv-j-U(D~?Faq_*{3muVs$I}He=K3*Y_Wbc~WsTh!4$b(nS%uq@3DjeP#NW*@B!? zk4HzhhlK2+W?(StdHX10J{C);jaX8i)QnyKn&~fvQx+9nMyD5s8|8%GqkSbfz^iK7 z{JK-C1$=5jwvp-?S+5_amT*S38~Z@*@>d$+RUrIxLvO8^);vLdtJ zlfe9)QWk^Xbsf07(|D_V5P8Ne{Ec4#i9B7SbLIJ5&Xi|R0lRN;r|a#H?zPZ+hw^Dz zK57D?F01|^G9o>~nN9%HC|~&akmd7|<4dIc8OA(Cwl*%U)w=9be{C)0yq$d}kMy+5 z5sbCEBbD`HHll>%S?18-P^VfOG_+}bp-iXgtqR#|&F1p@?@0qTHcwFgKf2yLEXlO} zA8w|_DJN}H%Z+K;Go^A%Q<<5joHC`f+?A=O+(Ih%jk~GTO3kM%DNU(N&0MGy$qgzO zN>fr)6jTIqMFd>fx#zu_@AJOz@%j?&hvAA7ClOut&pMbUN&hwG1z$P zY@d_E3vlv<$}f!su!n#f<3#oX=}q=Rhc%$)049mi;MXrYb~>NPw0KhXMVb8l1dH?d zgbtdIF;rx<5oE@MnmQ^ z2R3}iI6{Aua4!K*OJ}08N9#! zp=a7RVo@Auz_Ssr5DIwnFS|NS-Iv$g<;+CSKWoVKYgFL2rvXLlq)dRipx#EQ*EYZ? zC5V9O(6xNidhtvW=3r+YvgQ%VNqAibEhJsDtaNFQ3b}x_k8WFWWK`cnlHP{C6>Jdt zXHN{L@<^B7&)wt~5T%B@-E;`*cn73aB-JkP?FYN3FW-xJ)IHwQubkESQg0+WSv37w z$mi+_1D!w-BEP z$>C6NbZ}f9W1rr6d{&GP!Zy92R7dvHQj+gr-XruhZW27VW!c@zUby5Pb(Lx0ihg1HYU54=`WdsCpDs*eDlQGl!ca>NXq z4&xfav=gaL=Y6g!p84IV$*ip8%Q~u!5ANA+Db9q^G`~YL3uk_QewX?+Il(gqMMQfH z$vBwzo*x)XUDXE-X8A8fW@g&wP1J=k&%*l?Mp9*%RVZYuT+XtNDdJHCwYP2!XvZu5K)_tVf@IsoWXAfU`OIDfN5N-ijM4V?rRfc$Im_BHk{ z4eCMH^obkO%=e$z8>=D#jWA~B=V^L`!#ug?j>AKhYVg0tKdoq2{nE@YfgIKu=tG|ORA?5g6e5*cXf8QmW9b(sKMo`x>@K)C=_{< z`=hO;qxx7ssp@Cu)>{ixCMSDsM3_Hv_g%Be!Z*j37N_Z~_?V&o9yQiX%*cwS_=`2x|JFbgrFNAer{wa`+njig(*m}rrXgX z>fcm1HoZwQ=`ec+Yu(mGEW#_Lf}2+=j_B@`>grXSQuf8CXD|u^4Gn!!FAo{qdU}zv ztv%eQMSHgCxVgSOD*eq@Rg3cJ?rzlG;`IOG)Y=) zJTkZoC%Ljve-id8J!IyXlUbbj>N38k*Q>?haMQZHQz@A#!zL3!RrsxV22B!))2v4v zQgljn_>4>^9e(!h++w%r7B?X;K)$c)P)MT;vU6{;z@J!@0s61IO1qY zg(}e~h%f5i1WQH;1EDLprN&xdpO9d z_WnD(Srw;>xl?{Fr35ex>kA8BaNN(8`Gy;Mv+^Q~!tAhB7m+hocveIdHhQJ{eDUy; zH}AL5I*!s;$F0UjYEw>;q%L1thuvnYTm!nTdM#2Wu)b(4!dQA@X9<^O~ z6ldh~!Rl01y~PKif0l63Cq_KQDUUl)d}CY*XN)OHg|{)S6CzOaEQ`?s<_wXNc;~e= zgSVQMiC^dE24_g+JRMnjw#&NC5ZU7Z25H(*R?C(*mzNi!x}6e=LjAtE0I1=mDI-f= zn#Z#at+h2|hWTR$qk`BQequLniF+xpH~;;O+`}rc)<5Q3-^X1>5zJ$9lt0jl71vKm za*NOKJ6FtM4+cw0o`&$VR=_N|ePU!2uYoAaGC2WE=xeQNn!Mbq8>&Bn(@SW&_FZ_l zX9F2gGGb9 zc`*`eX^YVpuF+l#n9P)2OZkPra<;OywE_tD3Az1oaj`V)o8dnx0#SKQ-qaJWUBPMA zgBnW2ASWdO_XN?2ynz}8XR72FQGtY-A42Cy99P$F{CD_Xb}YFf6s3QmcTs3|(8Z~y zu3qvlx#>-Mn_3-!MV^93-jZK~hngB7&6?eK<5>}Xg@{c#r@Wq5 zJ-f#o6edO48||hflh>h(*xgvu!anaT!r~OZ9~YBCZW3r(!M^%CATd0IYPgzpO#b(i zL<8(rMUL88k?l`JD}2;P;sadYrZ*?j^V$Sx2`$q`Dk~>_r;`smuCJ z{Voq~I%~Tcg;vj`-`vH2Cdhd3IMJ^ms2?2qr?x=X97`jHLwkE0AA1KlzG0&47P1qX zDUb{Oy~KTa?@=2|gVvgEeePlPWJ!h!E`+ld_Y!JukEMu8*un;I05vMdV$8@v$cZ8N zEo$^SxNTk{uU3Nbju}g-x@G@#eQOoL395#&ZSxriJ$q}0&AB2Y#B$BAF9JhEasI)C zh=e!^e@>2-%gnL>E|(^LHE9C0)#lG~@+ekwO%Lwfj&vL8<3=l^`wkYbzt&_P%k+-y zpI0O?~T zCK9gPyLSKFs(U@%W0~vxx4B^KSEm)a1lKa%@!K??YKM^ZtmpS!7eM{83?Q`E&d0mS zeo&lM(Qfj48oktiB>%#^2n>fV#7{3*A1+BhTO4T#n<@y|Br@G5_9xMK#Yi&-wf2YNZ z=7kyJvR5aL3Mb}Ysyl1zfLYsA#I^+d!{lEi+p_O0?6N6OH)LJvkX7zif0}nM9@n$q z>FM4?AFf~Wm9%5qDW48xTqM!DKT->l0L_UB3NIi617*jxqZ&Ic88!{A*J-64Y&PE~ z>D1n*E>nm{-S;>9NVBi=?Ge(w68ux`Yrxb8-DE_6V{kmqw>33O@tPHFAzbb1alT2F z+^{!mD>Ie??3emSIw|E8_vpluOb3vyhk6KQ0l76qr|DI&Xw_nofrQDA-nAyzQiq>* zya z2sO?}w^9D3s6_1~$6=#uX?XZ>dBKr!*v$b6oatf>6N4&F`f)&I{nQUC;$&o3v)TFO zMJy5F2A2yu6HxG;8eX*bitC%2jEML7;IdPi`#jI}MvYlSiz5LsX>42EI`az1%{t%x zv&4;Ds~QG4+4+j|&Ilz}@)biIL0%Zi3Y$(j$-@nt6WEb|v^Qod+&=uEAhh=`{#_Ox z1oXaqZnKPK*DREEDc;jN2u?}x3ZYI4iqr{O_eq3AOfv%S<-Mo8EUwH_kzUFYf%rLi zcM-?Z=L!tk!pEqa&>1Mxe-F~?Rss*XaYoSos((kf7$rgYlF2n1l5^cy`BQJV6DkUU zpIpW#E{mtUV{r#Y_De>pd0-P%o{uP-q8Q?FRN|$}5mBJX500x(FG2f1M1Ko_HG{`+ z2OmG!6%~echN|e3J~I}Qw2c*u$V}rgqUv{MkRs~+Yd5{*@&iz}<`7@+YDRfENs;3> zGVwEAeW)tR54dEFL6)?7&xCwnQ{nraBgs%gr84 z6PM*6Z_R*FR_?&mB#NM1}M{PLA$r#T+!l4 zt{C2)PAL^keSsF|Gd)jl?(tWldUd58ro@e&=@=~yeerlgRFr{w_N3jE8@ z;f7DCJ{gqbv6I%Hgd*kmzlps|cDTLBpQV+)SZsrkGH6ZQE`~Ws)Y9MIR-SuV`6r@} z#)$fl(czh={hf<7^$9^7yh`c&sL66@PHd=Xci!)?#Yd?SFrB{3ya%C+qfV8rq#<3$ z<^#+&1m#04uU?m>_;%DtMteN* zy?W)h3d};~n{1mLAkWPv)s<*B@H9=GPY<)T45oMqz8$lKYD!SYcZ{Gwh_*1<42t;3DP5IeUz zp`PqHyHVr(Ww4%_n{|ChQ z-9NnwMSHoNxJX}IlxgPY;8#%(3RV3mCH8L^Vs8T6u)_P_8ObV%8hM5Ww2_WWaxFR% z@IqBAxM|cV28A?C|NI?xQ@}yY0v-Mg1f4}ow*6n(Z_BpNZlunKJatY{o2DeH=dbSk z{zWg=D|^4yF!T|Iat|+YvHYzcqr8YBl9Hv&FCc2@CqvJ_aP@%6A=Wfq$D5`tx%WRx zQ9XS=rnz$qpKvV(y|{0dvs&jsteazR)?c}8b-J~op9@}5Bw1wMr&*F!}EhGB9C7|SrC_vfA`RgU7 zkU)Mo1M%l5w*SDbBPy^Tv8K^|a&K^+RY-}~lif!VYcYzDR`&7wBjl3#m;vm_m8uMaNz9B`&YEZQPz`$3$;xWVT+3y)61uqq_L72S^Kpb$v{|F$`K5CB-D`l z6Q$OWo${q#?IR27Bx>pq3u21z$`*-}^B#P*H=u?wpmBxv8n(`|-Qo^cT&sPNh@h^aGxuVYSr z-|)PD&dGY~$EiKtR}wq*;z!qVUrceGP5zDTjR6T&#ZD}CYG>cr*w~l)`uc`Eeni8k zQikeqiySot*zyZXWpvTMsZW-S6?wUi$^D6`eVqdKdu>@nOo$BmdKwd2|Id;mOyInB zVZ5K+3wkd4ASk;$s9WG|=@9Hc7> zC%0KryUumlwWH5+|C+1%yhTJir=97S$4UZIN``*qPa+of0>SxL#N)@cyCXT=YRc5V z?ri*w`s10;GrrCq8g~l57<`I5*Nj-0H6bn>UobD|j6S@5QQe?X`A(w!toncc`#I(A z_N?)1q3HY#uhCyS!Om1-WT>2&qf@rMCha~jskQ+Sk5P#2J>WvxNMee66C==W+dDOlIO??SuItwc9AA^{7**RkXX??|n8&9S2hTZV*l| zwE1O+7(`s@P@q2tDh8M-ojbtLyv>|-0KDk!@tk+BKM0IA@(5PzinSby#IyZM)AYG* zUW$7;fZ3FdJr{l#ZkFg~moEMx3I0o4VzC;UdE|G9lN4Up6_MSOwvt&oGc|{lJw8=e znP`_2%}63m)b;s(48AQ7$C2i2akn1_OOgV*R0yVL={AQpi;-j+JC8Ipm8_RV_F`N7 zv!vnE6{v$V{L`~%cYa2?M^oG)6kGynIwaxDc}R$J1@4%Fo@878>HH4n;*LS2syv|V zh!byQWHgE?oVETNv+dFOM9LH>oLqo6%CrV3Bd#>IdDtaVXddK)o^fhc*8~o;KZ*Ct z@@>CW*e59ugHjgfO4HajO<&1M`6lxQ?YY+1;;`q@5kTnE%iVtGbs{wvEMsRosPFD1 zaV2$o1Xl;%9Dk0lpN5Dn<_Z5g3w0X7G~r=q|{WscpOv$7=0oCD!Fw z_H-lpC+f!D%yMN?l^ef^f1&3G)5(k5G2gvmDl^={pgJEGf= zlo9dpY~jeP12z(SA-ywguIJBw)*AHkHp@tCWSZ+h)q8cQz^Olubei<1XpjvW$z5}t zFdVY}liSLjz1|~S3kcIcF)vmFnaNw!t2j|SyEMziU~&%rh}kGE$(zP(NH*!7LGgTr z?E74r+BMVV$H1VlLZi+;hJ7CWs@O@tYW?3SP~!f+#Z7T*`1{+6f{#A0e3=FJ<=x+T zn*6}s%j-(4yeQ)Fd`Itae|8eC6jMtU$+wE46l5)^z(;QpDWsWID*7#Wvt~bH173IF z=sti>h$X>hhuTI~R)dW**T@CgomHyY4(VO~4-%cRkoJXoMy79w`D&~lGFtoP^W$@7 zra7_6tQs7oyzC*ne6(gJ-z~_Y(T}%f*$j!isHU=n2pjy7)~vFvRu_)^v&3hsHJ*Qt zp+d7!dJhGCv~zHdh_#}%$}W3UWS?v| z@_T((H3X+WnY4?7=;W@am)pK&8uoNCL=-vqs?CJeX%3@yc#l|4ddM>m;dW59kszk# zuIks(?16*4!u%iiDc;~VB)j#`Cg)>jn)W9FH|P=fy=s)qCF{&{sHJCmS_nJMz=P#r zzmo#2?~BfNZ%Z@Agb^{6Z!=eVk?DqzmmGkOJTBtE#v^i7v1Ypjmj;_9TPbi7_4{D+ z{P(b)1bJ1n84!P0Dvo*2Z4J4lgjrK7qs6CoV0|J50t%b@XCac3a@9?%vC%f~6k06bL-ZHYb zPqUe4lI^%A^1i=NCCb--%{iD%-+W|vgc@}8^cDA@azAc;LI0;{YUM&=p#D5kOF*5s zJome_kn%D)NWz^>UUqSzNe4|;JCA3PB1T-0bNL`O#=K(Vl1I@9T>n)drA0$d+=mX-m-1u#SBYBvqi&FTQJ2qNW7K9FlI%cVb zf@T#MroI~=0I{soqrLZHuVlus_eP$)@%(Y|4#VONP1?nKCkf9dblGeb4QYYZj*a)< zM%|-HPB9erIfA&E4E}0Yf&I)D9?b;*g;@0<@jF4$pvU<8I)$gJkyfYaox6#>O3zQd03hDR%ft zhTdpaD_$3kOi_1tH=ZmB1btd4@ucKDWf0=;AAunFcrC+MHk3b6iN^t(Tfu8#ULRrLy2b|m2-DwwI zb{;Fgax(Go+fT(E%k?96wR;-x2l8sRcJ@ZA&Ai)F4xX$@leNuSukI{vU%5Hg zYVy|;dMU2MPNR~r;nMMRoNZ~xyxW|5HlCP8)rn8??Ku(e(GISrwPxg^=iiqN3Wl7N zGWn?PHIEh8sPr24?oRWkR zZuRd5CB#b|r&ls}0D7%Mg^3kg(Eud<3(APa>qvb>2a7fSX&|)D{?sdp>))_>{B>8w zUA@$@008F`P0^QMh8G%1n)=JG=*w(Nvg7!bQGu^@PN?<%E^uiY(u*;!C(nzdvf_W) z_j#u(WDUYf8c7I%KoIess?mMc%;V}PVw;=uoNILk_E@^K?#sU`%lKw3($X*VLd`2H z)~C?Dt_L`PZJWmX2&`VFPxUN-I!Gt~pC#CTmRLV8n;<~%CcQu?>$gu4hYYT{w|?^k zhW>u&^ShVl0ykJFU5W^n%wFeLZWsJ2waY$J6&82beM3FIOrNt^D_1$w2fLWE0Fo-X zS~uD8%&Xl~9TKH@?7WipAa&+Gp}7c5Lau>t4oPjaEmGJwtL#%X&gW&T*Z=Z59o-{x z65eXeKR}ykYEjnL*E!e|FE*U-3W$wSqxYHW=Ll6{PwId!J=Jd*?iYiSBwPWv8s!_>sJoWUlPht*@6 z-Pc`oGh^M^_V&8p8gM!0un`kxyq74xHTp}^a3-2Rq_kVJ&{$ZysI30ujblT&4ZT7hjIKgjAi`+ir=1| z-neOf&8mi?`>sc7fO8q{qB&6x>n>ikX~?hQ zPWscw9+RA2twh+phYJg-_EPoH;+15;FD_>!--C}ZEjDz2lYCQ8IG4M7km{Eijp z{J)l4`Bz*i{L8h4$o|HoFRZe7Sc_9qy_ekS85=YE6a7duMj6KxRaK=xdJjAQlv+80 zF7C;Ic?u>BD}k-@b1Cwkc0Vhh0P`^4S>?&b$!n9Y6SoCob1qQhp;5_ z6hJdA_e3XcGA9?~0pz@C_JLld)QAV)Pin>L-?q)hsM5lSTDsqdztnMcx&Ft_Bl1QBC1IuOJ2TT9y;CLWpkP- z^ju-@*W=`-fI>Jy{?mm3Wg2%au?{>?Vf#m=ja%nIE`hcvH)TG%7xAT7ZGrF1ql5PO zR$^|o^iXqsSN#VkmG1+`-=jRTk4tWaG7g85lno>g5#fd~yXC6y%P?8I}+Bwhp@KF zc8+M8wl<3Y%2W!tl2zZvqZ|GWH2xRJ{a=V2;-5ZES4M07#4X!DqEV|RRi!s$@`(yr z&q9iwz!zvAwFjqwT~D1rBhys{0^u>!mHIj$nHZUsJR7nxDuB_k2zo*e^jT%{f%wKq zWGh(iR^aOTC3$7YULDxNG8zg?F#TuAXM`)c&#E$BV058*I+1npQgzvdKEg}p?EN^3 z#-2Ux8?c~3|H*_#3t^}8S!8r3)wDLh1K6+@D^R{o>4-(?<(Hg4!52MRoH!U!tu`h? zA26Cm=geCZAl~a|zp7{`BiM+FQ;xli$F&%TfUoRGN~%0HAyx6SXTrhDvl5z<$o4yN zFxq@56uqq6-98nYe5Uk0;D{{?zZ9`P0VVt4EtzRMOPim#FeEn>jr)ebMtiVF9Pt*k zkhy*FaVE)(J#YGHJt41~(gIA>4!`?&8%c)zMt%j&4m%lppx`5_{cmP5CxN@WOWg}kWIIm0@Kjs6|0xY!Lc=F3s zS=@{o-rc_dS>(OMHl&O|N^1)2KKIu9!kJ%|`}}W69z4lYFOX9lNrMI+{oh$2|356h zk)>)eblV)VAY>eup*&iW?ua@?P3Z+RL|6Yf9F|Nv!-*T1YYO4p?4=NNadCuC*`^_j zQ*>G{w4t8nJ2fZP`a0+2C}QxC#AiZY_-K@P6&%{>EiGyDha{_Ix1I+I+WV714&(L8 z?ddvzn4_Y`xRKBc?xsnL{wGU=tL}Nv$x&#u(5v`lkGN#wi~qmDQG9aG*213@<)c|< zL-P^ElOsQ|8i}}?Kr`L>SQ7i zzY`$^_NhG^@$X9%tY7D=8n=;x4ykW$2X9&y!WZ>dz1rjYONddZKY*h#XRJR~ZgIh2 z7@A6jCUfFQAZbiVB(i9)pf)#)kQ{U$9ue-f6{^2&8FGSInt%OTr0wbz{jA!AMuEep zs*h)t*eX^(x0pC4H+`^IUQNN5UQIrvaFgot3Ywewq?L;7X7*MVW|AVG5197D%5*%l7DJiLE_UnXAVx9vGyp$yVW%;5eoI z2g{#fT0EGpq&yl7#pqEt#}{tV{ymD?5Fwm6q~_?a5?UYP!p>s&Beq_hsfr4uGSvW# z!+6hW(7!-~TtQRM`)JxKr+8LQ0yjKYc;rGz^{vQ0oM{y!tEFj z9|3jU*8fRlPjy^_u_UM9APn)N_L3q&;=_ykp!UT!?%-MOH~Dy0JKOZ~5UyNt4>%zt zWt}@gHp0jzF7$h27Do3TKC?RxqE`#m;5lMg=lY60cC%HJ8j*}O+7y|1ej%13^9p0p zoXNex$6s%vPh_6UR13a@j7zQeR9iBxl#NPXk9SCis3S&IO{IOWZKgpMuSZt=6`vxb z*<(%|w>%@);``$RpL6Wf?5&dPYIXC~c9{BPqF?jr;>@0=-EV;e_GKqj^IPl)!P3JI zVZ)u85A$Ie?$;_V{IkS2N<;eqxsft+s!kqAiDoPWq*~9=G7dm1Ta>3N(@7$2rb7gNVo-3|AqAbZ z-fgvGVNZN`Hn+LTy(qfK;RNYN`L(OgCe1EetoJzLpK$HJ;lzoZEUo#(b%xgE@*at1CTOfxwPS@iw?nIX6qj?=R~4|UI$+)>+I8Wg6d20RR+#w94 z`0Xy3wd!5@TAJ$5EMg1-A*#pgalBkkTk)T-S}UOH6c# zl5pr>G~4@0bQ$WFc)VA$CbFbuucE})x?B;UpmisoFXpTd$+=$T7psnEOCI$_>M_DD z=VHo>7*IMKJUaHk(&A)mamjXQ{zoy3FjR);ebCPe zGouNd;{UTG>sWzn;(rKI-m!iy%gO&ft+V2SUdd@A!r7X#;@s>C3vg=Jb)i;+=Awf^ z&)e}zW6io@gygA9w4IFnsB@f84W@zbQe1i*rlamCNl!`*b~4L-hFhu71#%pv0hKOy zlZPd{^~}}1KlI4{Mx}|RW2H~iX^l~0kn@Pje}a6fH;wC(t4ZLF$u~6*Qyyq2VDZv0 zcjqVQjPKzuh&49i)su*&Af*&ly_m^j5hbr0&jWLvYP2F>x1xxZPn0s z3QQ32FfhuaXK2g>*$apTwaHTGPm6}tL5KLP`o101JMI3?g?Z&A&-2G_kH~77Ra7D` zsValy7L2*ZW@I)Z0k=n~Er+*jewXw=sK5{VsBjz`#4SushzL_Qjaa2gQ16N_J=ra? z1mcRNL+~KN(57j}=$$6XL|YJw7ob5%QnFjH`XYH-8=ao3gZ^@nTE6TQ)*d0K4^2XYczZ>q z8WjN>PKm?GsN>Knz)9f3dUbo4@a;f=V!E!F=3({I{zckdoKj`pp{}|5;L%4yUMM=})H} zM^9gAyY7KJ%z_cUFSCyNp_-YU-$tu95EO#OgsxtSXTOQS+e)~p#oAn|LpT-NOIru8 z46DZ%@H&%xA3~r_Ytg@9gg7tRar-bUpri9Ag->f-%U8wKQJ*hknxhzO;CR&ZSld*kR`RtzSkCJxxhQxzfKwZ*KjJmer6kFp&&fgxsK8nyo7YKg%QdD0f4Iy06487G??09Z&pcqp};y)90$=D<}=8P@(cAj1t{z7B# zPx&X)-+9Y1Yf!KDSlMJN9K^N;AFz6;cT7v36{Kv|-`cqtZxo}EEm%wqG>hA(l11Xo2 z0NZ6EJ`*%X<+A)&64rGa)HQtcMOVGDnetftHt<)U;qKPS; z-V22(*t2|&k3`DUoP0J6{&*lL9?$Zv?p}-vAx+8U+(^gtbdK7kIgUmcd)3y=5BCgs zE;ieSqx?X-Ha+d#M1Eynss=CO`@gy z%G`=6b^A8aHwn8gX9HZxh1^&K5f+>Js1tKP*@qmMFst{Biiqb-eEY>JvCMxFD2w9r zPxRCf^&=8X>Na>y=0y_9!V{lgdH>^=0@U$Wg{q0@^<@E>0i6H%YnUv8vtXi4 zYULU>dKD!*zytSN!+1wa?buY>i%``ia=jhF-~4)+0{1T1xZ%B{<%2Y8JtRx`nVOHd zeP`XhVklv2Pv4+J`N6rP2h|)hJY+O;tK;SFbEt_4 zc-Og@m-_1D?wQ0GQ`TSB%l-SIG!B^bJJWd7-Y|o&)R5Mw`1<~KeuP_1E_k(Q35^Q*@3wHx`l3o!^AqDo+B{>y~R$*UYC( z0kFWuBM6(Epx_6er9p&_y4@a$7}qh*cte~Tz&p^)u+&;`fnNJ+9VxWb4~}6$ z5#|JOXP-TnHWX{l2+r~#qP~3p`UHka;l(Mn?+ofM`&4&x+_1P4tI`PbnD%!DKLK9X z3j3Q*);z9J7!D+~{obQFT-2Fu*X&%qVZt=LO60P5-on zi7)q|9QxrT`9VcLdjvFWK$tpBZ^jLjj=El*!P06p_8@Z9CI0gUeIh*lvV{1)HUiu&e>-4ukf5(knl?raM$*hv_U?7}`Y?hVE5#l!I6#iT?*Lm4 zojAbd??}hlaERB6PDr~_D=^Ka9ZxaAVG`kpN#1;ZQbyKqf|>sM(p0)z=Q%_B{v9xi zI!vTc9^C5SU|q)m?^OQc&&jB0W#9tp21bI$=nYublBM+E{5IoqrDx|TLoYZmjA~GQ zAL^h!t$={qNbH~v8Q}c>8l>W-T_PXadC~_b0r*2H1DL7a@OM{XIv{(fE_nujP2u$( z-XO6f=w*+BQkQDb^OUYyalPby$p_a;`XH^RiYAc7&{G;=p&6SPSIgCR-ZI^a8%PR!pe8XJj%_R6I0?2O3Jv4+ z`V@JwcGzC&=RZ;fd#@@4JJ#{KF#v~tql)VRbF=S@`%8h~`W8N$5;MQPriM&SDh!hv zje_wx7?j6CA=2E`)vcP#f1e}y1ID!?$6Z$2Zz+x8!cJlr?m55?)45v4n?iSS`2iX( zn6h5ZZyp}uD2aJQL-+?p_2^?Td(BHoJ~Rq!!QTwTKiir7sAjN)F$k96ngGt%usFYO zNWy3BH9&w&KLJ=~q@@OjJ^h^#XpK%okQ#OO)9&5&bMspC=4{{U9N0fQ5{64Pa)+wK z(^#Q4`VD0ScHQ%`WVzv`X+=LIYE2}ty$*D~7bH!w$ z{N0luO|lKbB%r;Dr-JJE+bc48IOKmu4l54EPq#YwH64r*P6zCeB5tWmYvweN`XShG z+3iOxXeB68>G5a*IdsKh>CHWnsO&j9;CBDYocsD>#b=+jop9B0cn6ouVM;~6EW1|` zQAcAaRq$%fPo`-_e2#^F6B0MiA}MX}zw~oPA>eL67^iGa!tc7w^wrzZ;SN8>(woeAa}xE zqltDbDT{Wf?yl&?V4z-?X5-YLADl3l++huCPOfe*-JlYW(b}i`7g=5O8RUE9Aex7I z{|A;7EkeNSpiNs*Q^8Ks-|blSi~@${Z!oItsiEn9+cSzE+0$W+cu~({@|6{83r*+({zBDIJVRSITK z^?uUsJ2K9gvQ{idKKfD|+oujdH||t@xaSV`vA#^@w^x%E>pn$t1;;@9$eDlb-g2rG zalcAE2zKdwEW(Xdlk|8~bmfJfkvT@GMjaS3LkXe|hSaO)4LY10$6~Xn_y~0m+@O7U z-yw%NF`&@pb7yj5c(0@QxEoM-Z_R*{x*YT!LGH4qV_oL1pdD3b4u==g2IR!4Au!|t z_l};L(03^=vV(;|+bXr=XdOl|WnMHN1X>sRt_sf9q~|GBMB&+dZFH~)IHIu)ab{ZQ z@0F!_XNTiIw5?z>FSAO3g?>R2$TuYd*nKfg1i&IweXy^wwD@C;|4y;oP)376(fQ2M zi!i1mTUI@9&g=lS-0YvxwetT2T8$Koie=v0}N~ zZIGX)dz6x*65={k>ULIatz%YY7qJYGYX^dV-(1fW^J*L4Gy<%;qp7v24GYdH7p=p2 zW`PjK6c@mYxPz&Gl>3E2h5hpYWW#%dQvb~?ar9sS<0f%6^OJ<6`CMp<3eCfJ@bErnljWD{)+Kna&+7+vj4791>Iy(rfn_|KK9nBsOA^JvYp z=Y%*2*#|?HRZB;+!DxRuY_i)v&B^HLHjT?sc%*MLJi;mwW@L+2pA%s~X-+wGe!=uj zRHNIST-s#f-VehTmKb70;S+dQ^Uu8hn-EPeAQv=&btXrHo}o*ZAl2N zE=Nm@RHLy!?HyMX6#eqvg&U#!7u4}}4S)+-GzOBaKc--yDP`V^)^ZMHz2zjc zg1Y;Vw!psGjdZhY@7lv=lxs2i2JQe+owdLfqw8eMi+K`1E#F9Bx5NIc@hE5Rm^sQ`MD>#c^ALoVD$!eDog-5-AviO84*u}Kwo zag``S&T4P#&~a%wARcesYAwAy2PP?M_Rl-+HH+ zLoYSR5j-Y4d?~H8?a)3#a7hs|X?@44F}gUR-$+~kUG2{1kYyJY1h21a*u@YXZm=L&T;DBA04ARpaMBa?aUa45$X1-gx zBMWI`dEiz|lJ;j4;)asw|^u(M5h z$4eBns*EoVI#+tN)KBejB-J>WuAd$@-$t^ns@ty29%@|2zjdiU2$@bzb4}~+BtM@(vNpBU3A$G zCzjr=g$uN(rNqzpnxhrR5$)h%CzU5V6F)xMk($IF@d4%4_b?9iAp2Lz#BHBlrPD}m zJGqWP!7L=uQJC6u^R3C_XYRLo*88JSJL6uYc>CnlRwe~t?cg2SgT3O2uh}nFEwMOu z(zDoK|7fo)QT{b2#b$7gguKHlN!UHb=6+Vkj4KT<&Q{f^J0gT8`Q^H5-4|9B$jS?Q z-9r*Wu0&c^Sx$^*0B0aft>64&SDd$RXwQf9r{^?@6J9b*CnA0QZtmPzhZ0oB$Sw2o zBD3kPskVTyvB8-f4Pf>z-UZvILi@rJ@1U_^8l9@ka&pJ+>ejfPF+_dQoB<}H85tQ# zV5RS+ZSsd&j}}cJrntCQ4(}~hV7w4`&dEIN&S>U`Kq);XKN?&jmxK}gw8v``zC%B5u0ldt|t;yRqJxMHwDHxztR+TIYJ!+Nt=Y*R=|eZNmU$* z5bks5%#nrYvejd>)@?n9k^1 zz^f+Ot6m!mNpU$zH?uM=%rh4MA6PzrBnV6}Mn&e~5C7ojB$7);V%^-TUbEixu{-Hf zoPaQM1|<3ED4KY*TZrW~+zk;cpU?%JMmz@4RyU7o-S|dn^?`IdapHExMf@-ju`Aq2aQdO>LAF8BE> zpU9ti$L9L?;_}e>mE!G}PCb#_!zML088$qpJ>m$&R&3MKnWJh~MF;OrdKJvXTLXGq zXai%=xtNuVlOpK&^@=Fz4%saUBJ0m;W>@xQX$W6OgaQX(iz=j*W*&d;gDjVL5gz#F z<#mCZiqW}vF&ask0t4{+<+omZmTY+8@`ne}kvye#^FVzF+nIEfGE1?iPu9I6Ol9`&f(HJ0mJMvQwaY`OaJ1h?+R|A(#jfNCmhyT^4bj0LfRO3923 z6)`qCBs2OdBM4Xt5FsieAVNesA-PttfUyB12vHFtQldbJv_xqU5hFE{0HH_?AqkM4 z-1#5h_y2zDTi^P*mW!neF3HWg=RD8e``KH(EX4l2Af%n%yTrF$L@P`2s~!BltAgG! z+g#vU<@zPuKY?@sMm)@qb>V8Q+eZbku|NM7wt!WsN$9|74V;Gay>4%vlha+6CBwx` zh-s0`m^nqM7xzu(wt?gbbv!T>&medp0ccur|3K+k%=ad8-w>M0Vkx_}zk01TW;rWa z7~Mwu!~1BXRHAzJ-Hcz(Af=lFs&6(r$=>MpB@j4i%tkDqMXul}wW* z=DjK2sbBN9rE_R*#j)`BQ@=dH?b}%tsvwHWTVTq@)wCDV4xn&K`arvXo3b2br!@qe zX-Gq5-{vGg>1dr`i861R^H<`?Sg;yJi7E_E$9Pr-(9{8=-zTTwT0E^}ZllG}-lfe( zNrjzu*sv#MinH2psR|-VTsphfWc9^E(>{tSt~YYDgn(y`k9D&zA|!5{?*=D9*TDHc zDvy9*& zG)n*taD(yp0WsA77#O&jIs?pZ%f3PwHeM7`0@QTm5Sn%$Kj&j$93*EydZ z^jIrgA29XqdC$cR_I2}$8};g`s?d-KP$qk<9Fs%mH3%)_HQvACR`I0yO3uE*$1(Wa zN35!y%v!{ZxKd{O?)}#Gdl$#eN7N1IvP^d|ErXdf))@1HXa{=F1SX|VTWQmAcsfsG zwsuIyt_eJzna$t_gvo`|^T0v^0O@4&3mAMzb7h>wc&$1wGe>ClFCXg9P}T1j{WeM% z-({vYUhUP#a=b30#~3j_hPk=P-M!X=cYYJ5dm3v@%=UPh=a5`@=)0nX;NZnHf+f2KQS~Rx)iC-jQx^_r|W@iM#kHS@=nLxHGZ@qQn zFy?MAk+7`jO?lbdmoD{ za6a=zqR<^X5>`pkhomvrQRcB*EF8i^z!~$abA$0cnpqa+NO_rNEvRYG?8NEjdGIE` z-@ZYh-u_z9@cmMqSAbtjg&pC2w*#XprgqcRK=f3WsPNkGN-`#o9Ae>sRFTB$IN%CW z&K_ctFEoP|xK2G$k}FOi=pGhqpiJpGf@r z0(+>48wbTr=I`v)PQt4e4a?5Z05Jqsq_Hm{S`bTc&wLYH*?TK5KWD-)BRi9@vN<4s zT=AgKyZ1w^ks;TxagaA~STDq4#e+kb1tHv9UM)cyO?fmoSJ#!6>8lcn!(E=`Fv-&z z)nip~m)O|^zg~G!(3rhkin$qK#9EBq#B+Wz$Ahaon0$ z7YX(cgweS_)3PT;I%G-N@J0TVR$MYp7eF*EGH?uH9O%}wb5PXD&>&; zk}`FO1*ml&sm(1%SA%O-;w0vVj!2f$xf(ZsH?GS&4ah%6=g!Q@GS$&W&C=k#7VusRK;?ct zLb(TDs$|F+O4otz+Q?2TQ@?Kq**FwYA2TAm6#3OYV|wV&coB}ck_Efr8=z@l$44S% zR?JlvUi?!pzdorBGGK+!fF%4>FPH*-h;vakN#LRSO({Rz43b86G58@v(0|2Yg8`(8us7vIWdPSmFqeu&zGhKd)HuGcfKjE zjE@q9SPnPeNqFZ97VvfKjw;XVyrS0JNDp=C%;s6TFq!gyu)9QG6p`nXNOvV z6{VJ#?kY6_)Xk%yRZu%ap2F&m(%|YutR$CN^Ylwa4A8murebEsI#A?M_vYLF@74%RZKsBqtS%!ub)|@R}hG9%rerQkBu8gYZJr zN>Vl;<(=$Ly?KWX)x`jr{HOIZo0e2i?%RURf7M5sVste+POXB=eXEH5m(_xl$llG~ zxfOS!4OAk&OlN?&W_j~}P?}gXUo_itp`CScZgA;WaU7mw&N{#;cj6;<{s*I(Tbh@E zYXt)}BbLuD9ECX3TIsQ+uH`iMjCg_iOmvzV8o-LfgUDuyn1i}WWBL2G7D4eE*vY{H z+o>(qI~+2okGdqv*x7Txj-p^zlioM%+IOy+kq!pH@i@(>qb6S0lkmZCd19krcnUJJ z2Qrx_OL#R=su^-@*t$5XPKI)AD)aHR_fJhC){9K zR$z=gXhb!wXG)N^Z=~6A+;cL9qq1hd8~nr7&7qCW`}RNA&WG~8hZq`V_~i$Nx*i*~Qvf@@Cb+i-Gk8Y9R$) zG&6A6D%5kjeUO}7*1LTKCKMSTyyx78M8BJ)g2IDn59FRlD>a_^at~ERwZ`$9uxy7Z7NNb`MA8+k87o-+V2 zrC4)sI?)UcMb>9fZueJ6x*iVHxFD3uc6!Qzqin64C0G=9oU(Fd|IE?Z7Nf#8yH}?1 zVyYd812R0aUi0_^PU6m4#%Jqu8$53NDDL2G(|nCTzJ+S7auh(TzrOK#7+qMb=kHJX zfXVgPa1^HDwS`p*XyYjl=P7xcMmtr6cZMtwEWHKAH!0v-_8}s;&Sh z&4|+C4U(Sa%d((wxd#UtZk&iq@FU}e^aIGiQ6;1}z@ZDiv-%C+7W1G)nTK8vT3zr{ zpXXINjh;fh_Pv;KR2%9rYjV=D#L0S=H7Epbo(BK<$x(xKaKq0}W9Q?Gh-C?fLxwVK z!vQp9dBK>dSAW3-YOZNQe7C0#?n47Lo>A5bb1KB&BL~{qM+P~w1{y=8bv0>htGl)@^z0x@+!a3Q(NPsgvtap>1L%HUWEft zI9bN)Q*_}<(daYJ>|T_ms?8U3>j z-ikd?m=$GCtCJ9`Iwo)}5?@ zTUw_EGpWhD@u87ux+OHSJ1{T^%`i|$FMRR%b==w>qq0r_SxrLmKk3h|sPPD^0BW&j zsWR%P7(|JEaUe8GYU~AU?n2hx^z~_oi5T!$++d^C@W<7})}Q)mpnGgN196kAY>yPX zLTQ3N(J2x{da*ys z|62Qo(Zp(Rs_$4vZ<3bi)1v@;1z>|Mr6Ir;$3Sg5OjR5Bx$ixFJPqT<3OSI;;SCzW zk0?>?Qx(njyP15Mn31VX|I+-}r-Ur_K&Z4HGuo1Eb|Z$0a$&BX@@M4FEgOMkPoDHt zGBo|2AVI%Id?MKz-}foz#>>khHMu|MaV)p=D!}9uQYf~oV%_E)EZ+ENnzs%;`h=S% zkt!qL*uuQ=TCosAXARebx54j&n&C6~p5+CYQB#y?D$>ueRGBVac)nao07gVMWb=fB zCVu)7M6%w@-(@EU{MQpu5PsHvz2!oe`5HIhh8qL9jdS9Y_BP1PYauUnY6$9OE=D+6XCtYttUaM(kHY{jVX1 zO!PY6W$(d8Q$8-fH8Y{S0YuR~J|2)f6@a(%MR-swg!-4*SyiN_r7>!dY{h+n1@Kz- zsHI5ugIQBrk~h{%lHNcwvzH>Zn7zA0VBE=g{#|yB%}5W+93yfXLWsg zfWOCt5%aqH>+l`H5_l-dkGaz7=vM()< z$QVr9ay*9D>q$Pv9~Ou!S|=a3e#C0}rZw3VN_s3$u#wz%*uvk$6`4sH29vJWw0kzM zG2QUU?=Z4it^I5DeARV-K0-%&Kf2CV@!bFQ+`P5J&WSE&=9Lq}#GiPM? z4gE6FH43~e%wIIEUQ|%bk@`dicRR%>s!*enK(GY8b$2r5`*gWh4$$J@Ha^JKDUU*| z*P5rTC~tPg+agwLtylec7}4K*d=m2a4tO_!?fuo{;p;V8s^jN3XE%SDz1OwvJp@ZfK$*NdWHc`KJWxeKU0=akE*g!P4Y1j<)Ba6NKJtz3aA=s%v-c^)A3A|bgHS67 zeVgYko+C=I8N5(FeJM&$5cu)#>A3bfEsY|aU+>f1zP(`taC?8T)aS;JC!Ht|QodYcxRO!tM zpV6+`W9$L}WLX5M6xB(R5<-98k{iO!+A zCv*&KhFiDsOEH68czc8mxMq;X4WRj<$2*86?LbG1uVCxr_)Jr2IpV(3V?j!- zhAu^W!yUO|*4fF39icmn#M{sAdYdmgd*cbKd%(=Cz&Cdrl%WlMfEk#aE@~Fn<`1J4T=;>Pjp8|N3Yv9yM zCqhNU&+&(2-bqU^ZixNdfB9xyn0tKQ{(>#thSnZ3bPXzI)~RH7JBm8|+#nI4VVUT6 zq~cXB9i(L~g#Oenh%u-@ww61$gI*D0h45nQZkQz@d zR`-^)LrERftEDZ`E>dbVyGRX!UvsM3nZG5RYtx>U5c-XhQOGgB^}YCTy<1GAa)_Pb zm#MKQak{$FDr%&H8(Nz|%H8bk-!PN*3zDv0TC!ff)DW@gSIu9ZHw!p_wTC}0dpW#X z<&-izJ9$mp?tjMr5JQ6M!N>#4z|Kgpsf<=ztS$#Jth4z zUb*aPUc$<*1gz#?$|N>qg0gLg*gkRx}#Cxi66g|H2) z@x_baN;&0qab=Hf;XT9DC%vby2=ph%KOS?Nk}j)!ae{aJv^=F39c}4b@i3{O7YiFe zLfki9l!Sb@3~3UJt7GnwfFe~6@*UiAyM^jyd6&eqV)}SxDvS5qd-!XYWn_^%w~vD< zD`CDHPcX8jt&B|wGvy0W?WUk8-I=nMU;#M$RJ&sor*#CU;pQ;nCeDdW9?nfc#%I*X zndIgZ&x;pW;Jykv0aZwQ8umy8{Z{;U@dZBMdpfZo8{)8v4)&$Fx~j9fw0%zK53pY8 zTP|vEZ1a)yqiqe6nKEcW5IV@7$hsrTa=7uv_jE6@oKu&9BGnP(78>D2dg5+EyBR!oVSA?;K{7XtpvBt)$ z;A{TW@1uC(1Lgsb#|x%%%kS_#K{qNc2eY7U6R_u9a)VuULJuukp<#&xKc-cbPH3`9 zV;F*1lCUT@n6i$v9f%5ZXngE}6_Vk9=G@c%8P`u<++d(>h7s*k$eqRa)8#a!c2tL^ zem}Gzh4g#o=$=OF!gPnK5^{A%&;&2X6??)JTeT^z2@!Seqx+5H7v(i{R}YddAawJL zm{z4I^a;%>+lA#HTvKNKt}b}Br=TKn?b(0k9D|c%{M)m$RXwcTcRruJo$^BmV&8ag zVBD}q7TD%&G?`B2K$@6;kB#ps;5C`qmjwdumy6PQP)$RI3j$VM=R1$k`EYhq0S*NJ z%6A+mpg-iFHcVZI#j~jcESZ1ho_m5*f)FD3h<(4HR|Gv!-aA;`wkZRk0te@pSKh=4 zXM0_~4vE&2UMvJ190>m{oYFix^oQf!+viX;&y}DXf**%*Kqx$S1AS)@eRRCLm{vLg z;{xf*xWS6*Qv>o)ciW=s!#O=oFJg-uH#THf`7<~fCOZ#i=U?ioY)n<$X{SxPA8xi8 z|NF>(cI!we>||~cd5fMh>)yLFAscBhIbrLBmrRzqEc?tk1fu0zH7!kMWZ%H8UBeMd zkPwi?V(YDaZt$2M@+-+8HtR=5T!19~-bhFBhPxJM)qKA{FYmMzvDNNjAId8=M!!MN zOf_iqw@=4+IUpn zgePNn#k7{?@F`;*YqW2$FQNB}t=_cBF9Q7?W=K8rCR2ppMPl{v36(%QZw$rAqi~0H zF+JTw#@HzU?Fp`_;M15rFMJ-AkYA1@aSFtpYOjepjopa^8gVv##v#hL5{=C!n%8+O z-K0qOvEqw&kcoy?V( zVLFZAvcA9-&icx8Evs(hrmwl4;~Cm~DsRHa!5f)k&F7Ysm-yJekgQQn4*_2kiu8=L zo|>X8xM~Iy+48fMl^l;*4(*(Ay!Xi2&B4}!Oi+J*&eg?e>|E!%6>V$O6(NxO(wlT6 z<*EHG*0pl}v5F2yk3myUjv|cOYY_5@_IqjoST|Xy&ST`edDfr z>vke~l%t5Jn-=kLmUg!XI`<7VuP&Tz<427Lmi9I0(C=qV@RlgE^$#rx`Ho$2Sbx@< zmuyZ$1X7-B*|`0foBVD*D2g6|g?a_T?QL-UQ?naxAtBR7@P@!9WM1{*h!~^Pn5aVS zZ;}O~ACeiE2@lmR90RN`Z zO+XtqNtF0j8^`qYW>*ffR}k6x+C@U<$*1)Hn~7Uk#jH!7&$qHJa&TiZ;)MOW3VPy&i_!B$We z2Wc&oMH0D(S;8V^ct7%*piF%2cLZOs%+cJRs$4R_X5*I}V2Lnhdeu02Y~%+t!O&;$DY|&LL3FQ3o~utixiMwJXz1sZ}VWm8@$RBNR9D|RC$dFb=K2IeB^ zp=;Jo`e5c1kZO-W31Q|eu>D-kYA~_hsGPNPtjRr$8-kB8(ai`Jl{b6wOn^l`Y`P5A2FEY&SNA2yCv#Z`>W`FD z>qP)yAa}|63(R^^(Hd_@3oKRGE*=Ng06w}*fWjEe#}gs>Wo3HAQrnrZYRka0L%%vh zswY-%o?u`7lYPYGI#aZ4*QYng_}pq$IHgZ?vmGxyM#MHtVHWbev?^{JFF3rUfp}OmRQ^tFJhW{> zFwfCKijz~N8!wNZd2v;%m}M>KE%nPp z*Z}lop6)*BH^+7%rBrcs5;^+u@d-(2mf|XXIW)@RIsP8=0(*Yeu59S}SN)g)WtB}X zZ6}|3$r^l?9TrU8O2*SCZ+FG_ie8RUaKkZlMQAjg{3rq72=hag^WNao0bW{9z6Y|9 zreddu(oeK%<8nZ=;#>V^p3ekD<&B~OLjehMjHnLPwW`Jv=z}!nCWL4OxTd{F655z)qU6p0c+W$6D07fJcjEXcgZCS_7tKeS zhUgE(*}HMhx1<(x?R>mEE@*V;%G9neKd4CNCU0ZhARL&mnHdqUB(c#9sII2%B6?mF zZH@NmN4{LxD;L@HJ1QZ9&h9 z@r6FvC67U$K&T;{tKN$ug2*jD zEmf!i$~m5Yte#_dYTYH+1j=@1%$~If(pxu(F!Ubl5^W+c?_T?9o^UE&L#pwTXKDmj z5lBBJqY<~#(JinaN{Zi-KM1W9u52-+?{lB1NWaU5QF|$4o;2h#4&hX2zp&Yd^KIlxCccE^L~yflP>;!JC9nR90QYqJ*M;=av);XNZv*>nhAFagoa)0Uuc8wlm zrU7>A15rbJT0a39m0{QDhJPG0LwB|O7*&IMG$zpEal@I5Kn!ZngMQp&OzSickV$mT z9mMi2u27OdAO20r!~Bfz{xuzBA=1FCJ$76j+VU1$ltVpk@u?xu*2H*NGh6s?zKoOq z&m0@*lL1M>oeb1OD93h`vli^EHV;HFe}jc zDN-GG+=kEeHLoJjSnj^)5`Lc?TeF5H#Ex>qXlZ&-zlYKW-*1+27P=!S!?4k2d!RzP zgqaCIP<3SQ6|g$P(r76~#LHgw#o5Wg2mOQ`eG8g%)D(X3Jjxb6lU}R&aV7Z!FNlb*@4KA>W!hS^r^Pv z?^|EKY_Be_3OlSyaJ-Yi!Xp0U)4I>P63$o_rJJ3i7hC?81b@c@zp)tceaek1ZXMvf zBG4IrADy_`W$9W=vs;I5q^j14sP&WdN_WLfCwi0kY;>L$JW5(Q2MtzEfVhetq50Kf z<|Ip3IjaHZh3;R^0U=x~p3z({`|+`{r;YXb4Xbxss1E1ncmE(w1v6qasnt_!+;>AW z>u4TwNNFI&h5xiM|J}QCSA2CCOAg?h!_MF@&goMy$U>?vToaaJMFWlU=PQ5<0b}8d z4te%9;d4bZm4YVpgHwL#S{)cJ-VDCs>#cRxld|Y>RuerWUO0Ltzw)p^ESeTZWKw<_ z&#z&QLKX{rip<^!8QR_7s5-y@n88b4@A>yWZ%~U@BFT3WRv;#uC4zx2)&M^g*XU=h z{5yknonB$SyjQs%y`b9}NcC5E?c5#B>&&Ky^z#c`>*P!LriaCe8jZ0bo>Tqj*VnB# zpZH%GHZuJ&_^5W7ynWHS-*KqdD`!kpKT`rS$q?=nFJ|~IG zsC8?M8slUow_&c#4CtinY$FtQZAq{vCP|RwD`mUC{MJ>sBdf#!<*^n0uE?AW7oPv%vGhS0E4 zB2W=ApohzLYMUXCv?-hhugY>x(jMHBAqaf0(=VFi6A6gxFQ@J~}f>xLyOVJ0thfV|zJ*x4M`WuFFgtdi&jjIPmU$Wp=w!@`$cs`{~S+ zqpvDnXr)7#x!(qt+LS%72=|Ed3zO%kIuC%p-$NPc(;6q1k|gGuwVd+3?K9)qtN~ol zs3f_~lR?4CVb%coIc%o9Mo+QP*biu%b=F(Y%|N4csw*Km5HUL*9g#hRcc@$zY+-$0 zetrMd#jP%BhN#akYuxWoi@(g0t0c{|5!>9I%nZD;xEG%J1n)~&p!^ePQx^&c@N5v% zWU72Dk!w!2$_jom>)A_Gvmw3CbulA=2+tnrs}&xptTasbLi<-XkmumKS4`KOojAAa zM5=eoYo|3&?9Giu$7;@Jzim^8eJMDrD&}$BnXbT~0-l*(HOQXC4N|T_#;7d`7zw#{ zcLCh&gTFd!0q76bGBl`B@2@wQbg-!nb*=N!XKQyr%M&hlX)QzgS*BVqxZ^z?{toI@ zFw(ct7p`wb30@c^zOuX}BOWqZcdNlind-c@f_6u~<_$nDjVw;4Z(fi3`h=KSy_wVU zrD$^ta!;&>KY{hr>F)C*u~tB8&C!^W_=qz6Rn+2(ep{3@2~K`ZDU{&dq=J-c|0vBL zxCtK=`MGwp()jh@(1$()fOg(T2i;@cWEp~F!F!a2zQ!C8`7T9rEfyoHG*zen;p?y7RG z={s_}He=>R5WO4sWilB*4KpekJ+SkDo^~}>t}o@LRG*EI=6qNcOCB^z))I$W^!{W@ zMl4}AkWntK1NHtS5hd`@u%s4X7+VuCJc>okO0RV>XKuYuTf2lvj49#5FOfy-thpBhOaGy$*sGNtiEkVg+?88)!uG z3D7w3KVRVJVQgnS9Bnoz+&rF2-Y7aNyP6MEcFgyuv?iocF)67P> zMLvyb&vY!^o?<~LSM_n_l-X(Df9A9_woux>H3eRP_iPq@Y*PPFe064=#*F-Zw~V@V zxgPAw36s`nO_t2HSin8+N^N-qY9QQiuR203qy31w zmF2yHPvK8eXNR?62R5x}s)H!fuSCykb+==n`6ec2+O^0_{*&1AZEf%tQ+*d31pn69 zQwdS1EO42k1i6L9-B+Uk&EvOX2^f`*os-z0aYJ~d&j85}P^X#275Fl)0b`Nd*5kjm z1>9{vB-NEAs49PZmV$2B&^O1KSB;E{B=If_q#IZr_PWISZI3Q^7+|_<{1wEEl5uxj zi&jA7-S?VA+qZr7Mbbsakd2U9;M{i1<g_( zp^I4YtX*}5s-(|US zc0>~A9ck?k5$zuVfBNTz{5a&?6vS3yyNMe?_^?2No;o8BTw%H%sy-`ac(>#P~5a#Pp)f%MAu+ z*B!E{k&R^3P!C7d2P=rYbpxgGcXN`nxG!Pv=vNvAZm&Y`4=F1#;g8#)QCo|Ov1XyS zfW!Kv7}T>LZorQ@c4c~|*M4Az-}jJr)mhNKk`)e}sW4JWv?FDwS#>b1#EO{St*?GA ztg3KfVt551NH64Jr-{MG|I zVmwP!Z{3zw>t6N|68NWi3KO%v5B6ABoOsl&9%Fgan#JGj_(DKGOWeUO$NZ6Mb+I)| zm%$W#sfzI^onW4$dVNd;nnl!`A_7tGdTzmx%5QJTuV!OMs zs@G7h&DRy1-C|8`M(b)Uv`DJph2MWB2+yAG`q)G$sUi^Q5O_Lu{R2850og&z?8iMA zjt9*Ps4;(+jg*~S&0H5G2QSoG6QfCfwnpZozL~>uzTQuKvt?t;U7?~C65LDadpbU5 z*R*8cC}tU}52y%fyJx^*11Q|&y!=g~)#WgLCyT7zos}2F^SrmTi)Tj89XD+Eb%QL+ zQ}V{uk$e5zKuK$)SnlP+uo+k6 zqh5Pc;dueov$4(phJIQ6rBJ`+RtYI}nXX+?6TFhn>r;_A$#&QLYcq>p0F z4wiPO;QE1+@0FHOZ|Xt^S&L4$MCA8scT{x*YETsD?CYL$!V{7$)JRf;yyiSzaf?Q~ zbO}$BEm7pB4<=b7drOYwhm~xyCbGNrXArB<yJ(jol+$G{yaw z{w(lrdFHkj1p7c7p=!o=5&tOiV7PG**i8P;0mXZ`{D)2H%1 zgh<4F4<-4?!eXD!igQ|qurm&9^7B4a&+EtC5zvju#vl9UB~9`|(;p)5I$|Mxj&@`A z>h>+*p5D{kyMk(uxq|+opW}UlSRDE3t^F-s(mm|DouL5S-J~}a^TDILeSkA59bir3 z7JMgCy;yfw43gJfe86`bM6dBX0B*#pC1lmD;6T{d(JC<07%9f#9uuKY`ArsB>FTV< zft8&z-ZeJmpt}?W0NTfvLG<{i_5VUs|MOA)Qg#_G!n3o$Hn!k=KkW^-;}>$kwYv)c zH(?7zDmfv9<2HUUONlS2+IYo;nI)#@AhI`M~(RnkLQ zK~=9ZcJ>L}i`fQ3dYSq&*hM{pU_n}G1? zSX}9l)?tV$e0Dtb(kV~4=(hSZG&_-n(AhP2x-#mz{?`!nmoY$ngec+8SIT+pj8xEa zzo~4~t{O~n`HEL7Dj03dW;m8-i{BYn`hx1gVtAYf;F(Qt$eN$B*ikSOcLloO2L%c} z8EU6dgcRAiV``tU8pszrP@KpJ8G`IH_2RzzYYMKM$(o%)G>=Xj6vUCtUkBlqNA@0d zE*}A>+L3B8{+u5E1UxoUo`YHA00lb~cTvH`Q7c8uXv6tmbDO95cr;}irGtmcecicX zBSG(G&7Mvg;PJ}k!yzwEvLHY5c>6321esucJd# z#L5j(D>;9Y$0_6D#t`${PY^Yh3{UYm!b;BiGRmdkg&5%NjQr{;FYO^MH}lLA248&sl6eU;=#xp>cvVe z=C*e4&CFXqY2kF;7wD9c{PIdTfGaK?ZnNDPvTwGgm|i+lmQ^mC!4IUjlMDbh^oMqT z=P$0(1M;NSvPiIAG6L&pzg}ElpVP+I_%{IOJH~Sm?rt;M#dKXUSZ%>hU*!781K(%o z(}GsTrL!Y*Sp!s?{U4eN_yE}ZkUq$qnZPfEK7vOw0KF`3k1_`~#MNtFfqA|J@1c+s z#1W9V3vV{lqf6eKM3Bn~(Z7@8S*FscXt?0SLrYdnn(IrJbXWdVZfC-*L(Z)Pekij> zE&@EUdgueCgfYpLaQ$P=`!TgO3kR3R#SDE^qjCzN{-Juq%Hn*LAMB-KIvdq{C7<+p z1O@;EUO>+AH`puV5}0i#_YIdao)m>uDxdkv!4_af`g2}^7RBw}R*%FJ7n_QWQ%r|fBlX8;U| zak}1)%O5CJ%ffVz?*^k8_Aweq!F(uVz4qevRSlLYg$|Q#EV592}W(74Wj^ZRJ?iWlg=0o#e<2=b^)mMnq^RNsrIx3!s?(YO9v1s`@3a z31Q|-95;zV3BJ)}#Tz6Yh_#4aOV%v)=^LMli-8*55I9b^mW$f$H$;ny-)*kruU)X65*02%N zv$5>8W4l{fVYzqmJzoX*VB$4#-pG_7kn`Hg6zhusHz2YC2kkf0`3btOJ2URcQYwk`=3qA|Rt~pF7Lhoea^HnlU1YAo( z=nAV5gDr$QZpMX7&B5TlMSuvm975iGBm^fvX{FXyy2+j`zs0)Oul&6bJaJ3d$;F|h z?woGzUuN^Vw3rvf@>=x=fndzjdd;kNSkT)hYo3e3#lBftnXvLOq0e2O(B*D!X1+vZ zt%~HQ2ejlC^`SC04j|`~nknUzs67(5qz?j+bR|C`MbsG>dh@i0bh%Ivj_*2{E(#yO z--nG$Tc^rIfzA@v)9lqsrx@`Pma-(d@>~A?&x6(*B4=f@Aw$0( zbD8l1wrV#ew3jjI+dCtJod*arUW3%6(ojp1OqDwg#dqjZm766RHbOsPjoA(9sv%qo zjE*fIJyp{cdOikhar%3aXzA8A1Gz|c2WSFxgrgHI zr`tCJ9rB58NMvDH`k`L=WD%!}o$vD4b6Vhm69ZuG2g|{XetPq*IcxT2q-sU&GLvoZ zeOmb(Q1*VYa0zELH-l}nS_H`VgzJTU3_)JHsB?3Bvv@H&F7PXpG{uT(K5KUzw@j?X zJ$Bc{)BZknWnk)AFO8XsJ_I;v=2_A1_0vd9i#|zBVs$3p(*a*flJ`^$hppa+W2VoH zs^Hko)pu3J2tA`_3qEy+n%?(}MPUibh&!x*VOn)Ja%U3LMntv{66zR0R{J0sA9Y!w za=ldtqx8Ar+-mx>a|9CQ!asBVl51l0o?XTcl`fr*eY!8TlN&(%ohr$}ClRzyWnO+} zM=?(_Laq9?X}Y3Mg^BW>H96Fn7MUV%k+zh#jw1A}90o?c4q6JXZK`~FvvTx$9hCDO z>#?h)D|g@*LHGJw`S@~urya=8sSmqJoDD5ZhMr5QZn8Xja-w;1{|e=qDtzZS^5&Pf ztZs34cbS~~<_G@JD9hfp&(#h2h47s>*SK9-v$Js;UJ}g(&ufgH)A@pg)ulw*0O!q1`}JU%{IKyoz)%@1DRDXvKJ)T32_JN;HkaY zyjN{8-7Z*qHrQoe6OR zuCzPwhK{L7zHz?H634D=%q@PG9anU^$|u<4Rq*27*MiTkoo7*55s~pI?nzq>@MdiO zemusiZsku+e2KZ=KV@ zqK2a38iwP!&XX%6rggj-|9iz{50H=;NE=h2;}{$<09QwdfUpf9p7Dhcpe8 z3m-RJjGp-yT6C3u)$H#Hdx^7W#$7Ap5loKIifshj+4@ueO;~g6gIW;90<5VK9QKUbUtBx#%Go}+9jz8 z_CDlFDC%OUo5w$^BTI#?rD_!IlgGRNN)P_efZ{f*D7^5e9nwOByTCsXBz7qAem}*z z1#W~olzA)Nbe>-;ZD6KQW{Eh?s4VZ;v2)=7h3=Ex(+#nw+;{sv@kvy}Mgpy;fb+wZ zUs_p8z_HxrB{78H2vv$Q3%unKT`_7&YWXjq!PMtg+Z8KGiiW+h zSI){)Q2ctcweLG4YfcJzzQvblsD=QdKam(97cPtX#X@27m~2a`K7RDal=3O*RU9Yk6*`mK@bB?3p~ z@B%*Hr$erTo-g8rei#mj&;b@^|bnrIlxY2P2F^h$@{-%>Dmdj5SnOo zd3h1kUKH5n-#cz`5PM&!0*9c{{B*2(lYl6%#m}O&!oC@pS241DL?N)B9|7HeTD#3RA&&p zCH2Oeq)GM2xyn7}?931$CF-j)K29$a%caU^O{XPVptr5&BXGD->WzBR1cd8`>>w}!3ar@uYtDOLsu1vM%H_hc>nsDk{q81Xc6GBojJL3H!)8+ z;|Hn6-y|I9`dy3Sv&FgF;>oB=Cz zc*qZ?G>_PUB$c1vsZUn=i@VA2Z7?w;*;tR(erx5J0s0^U{K5msNxWt^XPWWx|D)?o zqngUrtzoMyMMcFP5rtDKq9DYMPJxu=QB;H|N-so3M2HYkY15T0r8Fr;h=LFm0ck=M z2tk@eX%&PB0Rlt_1OY<`NeJnaUElJYd*And_q})UiwqchkDayGdY(DwGbd|#dau8*LPu2d@UTQR`tdN zo+38NfAs_xo1g0fmg$`y!bmQ2@q`cbK}v5nT1M9alIcE!NIhhPP{;M$Xb%Kv5?9*k z1c|~ndLJgtK7g2IqyM_lgoZk8IM(5S%{5YWv2Y=ebBEF!E3_Uy1%Jq&$e3n^B?fPyZ;xQ=qKkUWSw>|l+Z#TLA{%Y4zBxycfyEc;-|<(g7tQN{zJBN zG&P><1!lf5qs)~mZXov1I?||(;Yq2*$a_bSz1k(RO{GRd+3Gm7gGtuN)vJ-yl)mzz zR+<%=_4mAG*PcI4SNrSrw!plWRis<|!_^$VW`kj>dqa(JgNqrkzJn}KU;I%E%?J~| zfZbFmY7P)y3}+i1O!L6{I5d^!Ew(3T$eS1dODn=Mvmvu#@x`k}Gr2i-938QWv5D~E z9}M$>ItQ|etF4OHs@&*qn>xa^CL|4;vUFO)<*%DC&A|GAFFVA#GDrQRH9kGpb7Q4I ze_Y#6Hn>lFW|Q~9nit$RDQpip9`7!!zyt-!Yr>CFb=lpDw@M{=D+UfJqEvR@fLXxE zS1K})K5UK%fRt4?Zv)Yx3JoJc*$OTPX( zVCXE@T!X1p&b7y$7nZ^TEjbwUIBeoOLyIYyni6cC00 zU|r?52R@%hIQkNUE)&>7Ld^&}Kx>mNqXWC2tEbYk^@8ucGtcrlmvR}gC)6dQblqx8 z#TV(F74%eFygAmQ;z|Nj@=%qcDhURj-{v382YudwzR5h-qN0^*LZvpvKYiSl`kjj5 ztk&};+rL$zU#j)F5$gj7`~@1>m0=><8rO*ok2i)E=_P|bjn}1tW9CgrvyRqmAmC;n zQDO4Z>cd*^%Xzxow*npo8)e;;(piVxnJu0ft!-s2+*FG{D)ig-xT^d(%V&mL->cw? z02Rn_?NZ^ihR`SEvWxU;3Fv%(36AjTpQTYv{J+M_{8j_?HA|6{Vk;l9tpSx!P7bNe zZSAaI*$x(}{cA3H^n)S^yB|~7g`L~K<(87xr`3_7LeVG)l$?ItE`cCwLr5bP(~QIw08UCA_F2Lk{E{PL>KV+1WQ3jUT@;~L zthxrMmnEdd@VnR4;jqqAP;Gbzxe@{r|9|;9gKUuh(O7rhnx8<4zJ{uZtJl8*mQ45Y zt0d5~7^GSJ@j>(Z%;h#<;RO}Nmwb5BfzuPC=9vpzEx*iQ50BQK7)fr|?tOU6dcu*t zH8UiGzll1Hdz{Wq>_?Sok7HiDD#Ky1GpDq?rK)#VImY8po4*OZ#AiAFSpqu3V1u=H zURdJ->eW`gx0E}Aj(A(_*h+zoVi3JMV~*;CPW9st{IJO%-So}}iG|Ag-N;U-+`yd+ zLrE`a+AO3In51T zMNREeWyPSa#gR4^xIP^N*$#zu@ONBu2m_#_8q4_x`B?kp4ji_#6c!HAi(0+zqB$1$V%qarK#(>vyj=>i;;W^$!$Gv99ISD;G}ng5t&hOxCW_a z*22K1kVLN)CPw9JN%n_+hcnfqBoCU*vVLvPu#oJr~hCvQmpQHC{N8TyugV&OZV{ZJpW-bYilx$Nf+KKX}M ziSNI#n;8`Z#<4uv@Xnq1vL<|RBh|YlaKKRfMv6o#S6X%FOeRKC!Cy} z*+>Wt#!pSH1io08%w;PebCuj&s%GgDqFWc#ADF4l4e|AXm%F6dY z9Tx;2iIeaD-tC=;cV&KyCJj5jP5K;Y8jjvNrYy%#nGsgUfC+uhqh48zD$8!wDFIGA z6xV1w#QTPEj4~-%knp`v5sl$NWLG`8eOgLqSoBic@7p>*A(zJT-c8OL`@7zrihhsG zZn~tp-#(PVIEgcM^K`|9$i8Sw?Y)xMD+9ocHxCy&U*75*G!st;jN4a%}!=`${|@j5y*ssM3kL zMpg0Nr~QTM5Z{H_Kc|nHLaN+!$FA?b#qp4CL<;P`6i}mFIir;Li^G>SZ_saZs)G(c z`2}sdx>e=5tcBgacgHn;@%3wPTuIAg6b*L%cGGF%jPzv1b<}Vl>uKXX=8~R{tF+yZ z1#K01?V|9K7Hm0rbI~!(Wh>2TY!9a*TM>D%E%J9f^_6OjZ+UAZ&}jAdINr*+qepC< z{YQz@QvSnB@G%~=%4q4?p+N3b+&?bbQ%2igDEL2ZSmJnzFtE!+mv=KQ*{=z9wnXdr@d|2O)MkNKBCRL`d-4N0(KqMbRQd$jm+AgjUF@@ zMeT1cQr!|ZIxL%QkK_*-A|><;%REGBcx=`4N6QK9^&z={0;DYMd{#HuW!V9EI!}>O zSMzMod!N*~nqd$Fh)lG>l6ZBs9S*I-27PBXZE49h?tMIRsWG@4W&r(G(;77?NWl)h zX=3MA(X*~I`S}<%j5#f9dpuSboJ(Y1;sgV0bQKJoioakDq?0X(KX^Z5F_N)EOlg8D zR2nhc*pvvi+?M>f&^)YLmq-VXq<#$)2wXS{pQmMlM3=G(Ot{Q%AYvKT&(B6e#aOnq zq*)w>*#Jb}8x#kH`QHY+>@W`2ThgjFMDk+kg27HvJtw~kb$W)?ZyJpJgHZ199$-9h zle!-@FSO3M(HtP(4JNU?<#t1-TeFtuxAr^f+>d{3egMwDuE;S+&)r+f4IeT4x&l5lQP-P&{@YwlZ4IH0;E;%#Mbs-F z*LV$Wt)rHxr^qGI^rwRT_RJST#qZkR`YI`xK1*yXQ;)Qts$>P*?hN2B9jlJ|Qn2=w8)em)Q21 z^FJ%@xFk+x4j$A}*c&fy&@h&!@K&5(6DlqJXK=FTS+mVSnCh~jn&4ocE2Gnp>5k(< z--0(?=q^}e@S`7DeYa!7B&o#vOq724#Ozkp?FpSr4ebr-=_QG0_Urg|L=SAlM1bNa zm%ytg(fx<@N$pV11GRW{$SJoZs~C#@Esihfz6y%4y+{=$dz3xZ+8Tyuai|195&9*l-52vjkBfcf$$veHM2YVv?a^0iq zQ^xC%p=Rx30jk~dpaUk*L(z5PTD|hSh>_`gO%3N;PMd0f)gc~*>)a))-zyR`TK5Qp zmz7tmaHR=DWgg(^%v6$TK`|_@4UD<`Fs9Nm+qH4uq%}9D{gyAUxUn|y=@o|diSsXn zWe%ubt?)2pTfZ-?$@KtOp?h_UI2t94;2(uiTw2co<5Z~;+jc+g+{-q;jtL(M*G z=B8*CYg@B4(?)*|WUR@v45JP-GAD4m(0L-INxMOKI6X&P3{f$O)_y8Z3t4i)oa^@9 zG+z=q2`H%Kz7?`H_)St1Nm)HSovi*Np3gZ}DI8=s(a8nY!Z*Rcj`x$OLx~zJQa;~k zTtImEQSx91S_y9+%4Y`h@~d1Oq#dm-;+vwa1Y>BG?uZKiSKCrLv_(?(HZ*Sx%F!J} zN5(uK!tIo&MR)G4VN5P)N(hRVMGg@vT`Sy?7iw=HI{S8!YPiRhv>}l|H>AaJl-O9U zqU;Oy{)XY%9YAjWYHz|9Gx&&~W{hi)T3^v>Pvy!1m2dnFIL>oDNK;e6;d0VEx9a?{Y_+6VmH5Q>;d`q5g?tsX_|R?{1lKXbfP z9a7k7Y0%h{P*MZ52xL8=51P-3fJMzAQKF)VWBxsMzh%|lj0sKazBrn$b{G7h>qgyL z)j>)58sez9k+(<{aajtmhyxz>!?K`kbD5OC>5wQu&fiar2R zTub*TfecE_pVqbD0Ep)j3i+9{w&wPK8hVf(p_tHiu}YU?^oj{^34-k{vC zbNZ17@CcL&{{hif3GxY$yN*1roOcFu9LF>v%)VKYZ@`sW9J9lNe_9KP>pu7Gb1`m; zT@~)SwR<0Pg`k{h6$B4vN6M4o4ZM?8HMA|n)=iF$-i0MoO0Gtmc6TeV9ff}g6cenU zfoZ2(geCZuXH{w1QR>Y~w82+Z!&Ijb3ANlCIT*i>N5f?e8e)=5nA5c=BrP}?m&Tg5 z->lUim^L_&=>&4D2!8=#nu}}d1s&&ebM4fcJ8ORWoBabcfrYI8vSQbXy*g= z?C0)3D;2Be6%_|Wm!mz?anS-OVUn^DeD>4k;NN&LdY78HncX~&#wQgv0UY$6Zabo- za?BWjCg^t<{TTl9KchZrjAVd;?z}^JzQpxx)TZ5>w0?1Ik!DVZddX#sTo2&=SvvP5 zXd?R(OHLk3Loj_5t)F`*+u{>9oC)rx9vgmzyYV1e6+{by<%PtY?G;hM0c23n5Wjkq zDq1P!D#-@;RVsRuW?#1&E_v*}fN>MB>jYJ?^TC*c%MO06x_86DbBeVxb>Z4`vy|%_ za{EX}uXz`uM|s09l1eNS&fFe|jLfz#JfiR!*2mJ-Z5@u#=Li@e5jGqEaCWC$o^uP#22 zZ%f8Kth*X80K6}>1TIJC+u1sVTn75eC+6koKR!DIOx}qhCkHgSo?%9*UQo}Xe&pRg z&^Ug<+N2T2x@X(8-*>-bSeo*UR(i&LU}eIz)g}RLaG7#p?o^Nq`eNelhWeQ3xjw~I zSzj(D5p7;uw|5k|R0Z?!Sp5Oo@C9p;*G#l_lQ13@eh;{mU@jHC3g8A1udGzfQ6Fc7 z+SZB-w0NIcy+zkWxmw8X*19BOJKnsAH{ik%W#VyG@ZMQjO`^_0R?jp93uk@hf6?6i zn3vo>ujK#E@BLG|jfPp^es_*0nxu8~y59gfCWqDf(UV0z$Fx<6f!=x?U(b_&UfX57 zkBz}Hf8Rtc;Bl^&>Qjy?x|g`59O53e%F6B%&FT%>Xg<8pRtY~cV{YUsP#>+102{df zp$-2@rWE;)S@Y)MJCGZlkp;sZ=Zgh|Wx7LV#Mc2M9$_UBfBil0yg+HM{;2h)^}Vu{ z{ATHFCXm&66aC|shdp9EdzVO$x)QYk-fqns#L~kDTl*wNM(qzAdD};;t@ROQn-jTL zw)rQ2R>o{6e6b;k&kc2Z)t-RX)LoajcpbAdB-jt~Hzp)PB&ZhjLLWmABV^1605*dG zo5>TFtGY{q3Z^q^j`6;dt~eiv(-G&~*EX{At$H8TG-+K2wQJYQn_Q@a<_hU3hsn(~ zPH&f5kja;MQ#7Fw&%Xm~uKRH$GD}<1f%4sv=LO3Uvd3m>dv6WIxGgtyqWaJBIo256 z9w-)gr@G|PN2&HXv?hl|=?C}u?qV2Z8=El(EH?tuD@~5Jr7h_{<_M0X$Z0YV;AS(w z;me5M z{(>W~Bi)w%(>l?$Mu<{dvgyO|v|ZgV)d9U~o#sbA*IBmQuzt_Pff66Ena#4H_zqA_ zE9Y;;zrumV8*-K1+=|F-FNIO}L%}88N;A_6_ibh(3+_$zP4uC+p`2d41LBU3`VU|6y{H)IX_!7bONKgKc>BY4YSLPX z&Rw-OJ#jd1IOq(PdcCY(GI;9j7jh88^ag3~um?5>R@McTF-LNcGz(@c?4EsWK<_uC zBvas(YTCRm5AstLn-VGsmjmA)!MBguSaG!%Sod10VnpzwA!M1#xcSVr6CAzg=g?_M zHA}s!tvd&z-s_N^Xg$6@u@`>d$52mQy-a*4%eiMvhZ<{5qFwcvtoD<6`qb3<@cLCQ zQy~|to-xN8)Wds;0vCc0Cb54>ByGl(A(kZ^K_vV=&srTtux`m%KjLy%4h4D;+GlVx zeVtl$`1L{j#`uic!sWAeD@YobUpT(P|$%0?HE_! z^z#1HumAW@aqrI$BE0byB||(y?U!vu-QDKdvs3IU zJ#F^wQu?ld*2y4`O?AhJ_Qw+BQy9D>YsCFDMbDzw;j%GVJIBkK3o?GqC%`qxijz^|7OD$=)!7z%Yxh5%yIV!q7 zCE4iokv|?qclTD*XwQJ&hq~j#*P)@HW0PmUx<@;p_buNqRZTJoXJMZ%yiG5$jD!&C z#OhW$dE^h#8iM4j9tlIdvb`$M(c@hkMsb0Yy_8mY+UP;Yy zjyarwA^;bWZQ2{|6KkFO*S8Mt4+a7+R)B9GcUxaFB8f8h6`N6XfR5HJfP$a9zEe_m zblRQABQN%ev&pfVYpt|OardxttM#D)Z9qKp^?8!+ox*4>=2NRG&9w_ZD^uZz80)`| z)SZ{^{b07>Gk$9yMMPU?`m#%uL9>aHERBxL|E&Nk10td;SKg9ITHAtasuL z`u-S;%XI70;ajuE)m!+4W)$_oI(x>d+l@7Zq)J?f4_mZPU^gJ5I(xjHl6_sY^IZ4N zbJa9Dt)}{2^*T)I(D)3@BdzOEk*>Klck3m{;@nt+_bhsP(klQV?8jcAZm2%dY_TMM z=g*v}V}U|rrIKV_2=8|cxh-)vy$=nvOc)B!gnOLHpAK8HJ7v`8S-ut1uc_rregG`@ z3vp-Q!1I zSO2!+>mrLoOQ2lI^*h&d*NoOAxQ2T3cTqkabQ~?3eLW^~c88W*t~`ZTuJmjl)aN{k zbW=|@UD4XIDh5@h_jd3L^7cP_Jn7E;H2NmGCPr{7`EhtRb^oIbN7?nQg{LaV#CLrT zb2p290a)ZUr*L9X*;9lh`TWr|FYSBAk{)hs5vXnqc^`SReZqrXli71sV{9fT<@JIf z>(SOfZUi><>?15tUH7Ovo8UDlc=P*tz&Grix9*+mfS~V>2)#DEkWWK&QFEoD(^uSS zr_YV)eP;;Ix3C|%T#J9cD0lnB$@D`TU$>f_`Af~?Y{LBEnv~)9I!leFVsK-r9&ieL z)*Gk{xm7Y}R+Fny*WAyLi=-eU|_&}BfuUIMAW;Z;axpEJBPFdY0&>y4zj z>>Libq>SrF-@U6RYVhQ&Imr`dC;;Sm{Hb(cnJITdeNoU;(&_CU#<7|biUq#LpS%== zu|qDZEsf-#D3Ae9P&1sz7bgo|sj?fCid})r%#W5!+)}XCr5>*%l*Y!^@ka`8hlPZ{ z^5+dd`i%BSxpJ2oKXSs%dS%o4B2VY)h~0%t5*s>t8ZRUaJsyL{=9>it<%rk4%py;k zG#_74_%SEnhA=)R^pKZFb#~;l3zB32-~A;hGLZ)@2@ONPXtxTlh<6xka^0Q=lb^o4 z>)<4p`!()8hdF9mS2+!<-PH~=+SI}Mxclo=FYrAMGna;3#cE!?kQ~uaEn;IO-zGg| zhk?;@AG0;kzut6)$~mMxL;ZmG((r$J4p3D6pPldj_u<02Xb-eaPTOI-(zgk|KJ0^& zgC4oe%eTJaGADWIbB+gYIu^`yM+UQsXFaS-Yn)wc~vBp97>xL$okvf6-PJ$c0jVi`0yU?j=rv{fyk5;EqOo9iMNOFK4Hno%lm$+@S8A zqrfKuh0)Ku9FRjP0_t{4hRImfl%^EEspl01lc1%lvk5b)avF6aOXYcN{B7J+T^V<_ zqUe|UL`C=HO%!t;FpELovzSQ#AkqESO?k7tNTT$oa|&h;5Sm@0^%+!rz+oxmEsqc0 zn;$gWhP=b9)12R;tG7@_!t6#PUJX^rh-xZJ{Pw*7S-GH(2#6Sd@&WyPpRp)X|fG>$5)l;$Ge{qNNT+3Y(+#dPnHY_{?_Vv%-F)D zVyjCNwofPFle5CyM2p?5i$Jt}fQgch?68kJH!l4O!R= zyoO0N=K2Gc@Db=NV`2RviigQ$l?P+J!$B}PMqEQc7?Q`;GB=I|Px5mq^DVel?*eQe zRWcbkkhaq~G8!Ong{ePtbOwwCj+a*T-UuWFvt;v0^{N9}ulTSWx6yU=MZYm;IgMGF zH~B{iv&7<{AhW$dOo7!#2fb;r=gu+5z5$Ek<*O!J1333=@vUP<%T&Y$5`3zTx$5%% zmfPS0rh&*{$4RHLg_YhpuWI|3IpMcm?hd$jZ?ZFC_nO~f!)m||u$d2Q*)BMBi}6dl ztniy!1FZ$&gUj5L=}Pnia%JZIb@hBq|7fqXlZ1LEx${e%`BEN}UM+3OC3MlmYs^*J z{VpRLwk6#T!6`()g&=g+58}lupPaf;jl15}EmLk$yqQ%+S3A1%@5V6QMIRGyTz$X| zoMb3;H@<6cT+?5!x@CI#9G&)Hdn9G^J?lWf=dZcoY@h7pjr>cpQX{j$4FQZ`1m1ydNV3`xOtlazwt?C~c=Ep(%bd(Z3+HO-JmreD z#jn}Sp>bfg253y6d7bBT?!PbSJjlOzPQHn0^gd)lF8EMa_>W_8&S7<~iE5U(Ir*)1fsM#00yKYbkby;}+Y)71$`l}1^MBDQsg+-_Ce zds7oc^~5VT{dD0N)n%fm8x3w8)ToGAZQAQ`Z&PI{DSe_=JEqq2P^*wc=1O3jevC06 zwHxO5N@|=u7rD0#NWl%g2wUcUev|O^0%Te^#OzKY%VT3(EuK|Arod)irK^vZQc!V1 z&XG`Ni_svUxyE>-uv?VG5K*vwCK{<$Wc93u5`_MQi1v0M_Nl&*aF#haj?m?6c(ZcG z-Sg5s#ogPGtE-X9Rqwd|jTAe4865X;V*?#9xph;N)-kEtd*%bzphU9TT@EpSYS*4r zl^p#bO?po>39tHe(`K0X8c4|w89~2<_vO~R_U-MLppH)Nrcp4l8MVq6RQcDZ-+G;H zB+9Q69rn8z#^ z60^-=SN8fjFex+j@Nu@@IPP8ZY3m~6Fw>HOYt?iVYFoaSeZ}`2H}+@E29vyZM?-J& zvv#~()x7ok;?XQK&N}5fl@@V!($Wba=F^T0455)rbyEpYUjzQ1H;f7!)EUJL#Q8T~iA?p;|)}o(4h$BPY zd!QgfNg{zJY}v(Yxtb#Be`+y~TMc$fbSpxc4<$ z3od;)ssKNWx$1J@+EJy59DOs`I=MhZs}ky?a7)8Prz6pT>-s4$O8m{f{LJ|8qWT+b z$W(X4wJ#?ojKe8>@j{Ci#&(%NsFl3_*a*2eJAn#3wPp-z^HXiyGD)O8UG0=K~vj5VqsXhkyvpGSXg zU^l1Qsj%e`_&=5^Z&m;q_O*T*ny6kc z+BqaEAG4}3sWlLhF$IH;@C;-)u6t)AKlCQM&|4}0MwZRFm0k}1$88_tC(BPvfL?^? z(R$~=+}(nYEOwUaM7veyI?vO{X`$-4u(+TYwV{ICY9WPr*y1w%vyQBFeeq{s-T;b{ z=T#*sjC_U%tnX&rb?r7Ro~h5p+g^sYKbjCYTa@C`k4R~+f)=JKh?Rk=TZYl>(~|l= zyJT0wSgWYd8OLCtH+eE(i+7w0otF7=wLj;-aGCmWi7_6w)InQ$iOCHV->aN?0rCBDCw}JXZg>KoWn!GpcR6L}WfrY- z8ss@Vm2Tbs;WdP=cU6T07bf5ZaC?5E-1^vlqFY6`);+%XZ50n-OMfsfCQyLeXHmyw zP{$;JwVl~>$f$5YBqOr9&veXX4_YtmmPM`V3VdbP?J{<}FB%7ka$KjeK~j5n4aY~G zTPqfyVLWojaI2oZlec7KFsU6Na+YG13OKg!6eS3~p?lqm6ElSDJo=}^{_d;k!kAvA z&KuD5ZJcF4rpa+#$$jVW5yrX_i+dFP3!=|NLyJk-22QG><)1|v{Ou^Wl~&0aXH-t+JHHX% zeXN6b%6d0E9?A0$^DqaQehr7e*k7<=g@%2-im2y*YI^FCZtw zs(NsZUF!Y^R?*Mcg`a8BPiGI4n|P+GF|SDD5zZgt8L{}4S=3uXSTtZ~$a7Lqyx2FT zL?A}r z$b0M}j%G4f#($ZW0Af|1yyo?D^>nNJ2Y09laIWlP-0&r>jb& zv(Ti!)F3I8O(QJ6%;a+RfC*4k^rv{{;D$Q;SAjdKOb_Q~C>k%o7Q#x8^|$M-KLjtk z=yW3_rFD|J_w)8zHezSXxt@!Y4{q1wKW)2x{PEaK^?~Z3L9a(7nfN~5dE)8t;nVl7 znVBaoxVWCSoqtW9^@Z=`n{V~R*&{El>Ehh(#}jY&jRy`E&jhnpPG5Mu-OFvN8(VnU z@>}crmOc9~&d6E#Cu4Tn!*9Ibl*|vH_nyIKj(f7W;wg<>L~=mjo^7_PvfSZy@8)H zAH+}G^Q%8k(wm!Dy6nLaqjhfO88ekSf<2JcbUzjs{+ID!csi4t{GL|{yUnmXG;01} zKQpy1Zq&$dNcdLwYhR3`t+U&B{2@Q)h9t$(4R>jjzM>nE>pDBzr{hSZ=eXPJoLWpZ z$$wN64IZ=?@88$6dvSB$qZspjIakh}8H__j3O_kCPe zt8S~YgQl780SlHMDO4clcCGL4_wzH9#2AWxZ%62o)8ZdqknOl;eKPf3uNX5bd6reP zGOLn5oGGh2rCE6RcIwidp%%4?!@Sv9s%OG<&S3puJ?*G|g4)T#{%;t;ze$<@zz>SA zy_`cMj^XbNB3Y^hmP-iT>AD2YxH4mUDo(crFmyjZwsNGk!!S%+tr7v4Y-6j+i|I)1 zH65Eiq}<4SpfeibZR%&_j1iZBc$vOsT57o}*^MoaKM%}2^)JG&$DlY5!#TOWC5bCr zLw{gR2?e4GZI|cR551hp{MrpX-%M*`w7mn;)>JqU)i01wX35@Xk&^N2 zBFYY?+06HXh9n@mL!+*#p^X&|*kzkP-D)}UtG_z-BfBOXrk}uQ|Gzq#V`>MtVn3;teB@ZAR!7vsn(eOe(@>MK8;+H9M zKYYc$O_&dwhU1$-X5EqO*Oxgs^{r*UclQT{K+jZ)^^LgDrF=UFtrp$o6;#W7IAO*e zC8q?Kz20ITo@_E-r-e-BSZjrDs}~1wnU?A|ElfQIOBnHEyOf zwpTPveIszjN1?|*^_xGf*dj(3=A_jDK(~GFr$0>oeIGyn$GJ1F2)|Qo1K_-0X^e_^ zFgrq6W1M-7tWj1Q`#jShaZ$ZKew^wsAS#^YV(3gIUi5j~(lQhv`{o}4hRYx~BZ;vB zp|T!Brc@!_#+}LH5N*jcBAqTQFsjC17 zpBCK2vmB;TtMhL~Yy~bv)4mv{p4Ec7ILyE}DzMhSppO`gqea5^>E_@*CDJY2|77w1 zd#i8Sj$7g0H$8(T{7-+zl5b42#&k^EdhHj3U-`&+ zDtOC^I{ZJrT!C%F5(-<52JE)~Xk8dD(8*;?5#HbG#h3Vwd--Fqfn>ioJy+~dK((R! zmBF~jIrBx_N_I`1G*YRmz6Eg4%C#2b&h#X z^l@BeMVL#3p|Pj%SU{UkFN)s0j#Eoh_WHkKb!kz5M!mQ-H8hqrJh8njGCvs#XxwRr zt8ei<2BtR5o=t9Xq*99Dl+zvuVt?2yAmh}Sgz!3s_n|3ST%V|!Dk*ry=w(L=KUZ?J zZ?h`4{|~#Wv!#LzCK1GUm=&BBC0{GkEz#}KCbB@XwEQv-a`4Kvis-3;IWv?tecuC zI^H({UDhdxjPSvXw34N9>x_4QZP*Q!5Vb$@Ra}`_K#}o2H&{@h;0FIaPklhlopC94 zO4&yF10%{45Y+kwgBT`r$TDkDSn7-Fdpn+ANqE?9lwsql;#BDT(ArDj@2%I zie8D?_IO-{mMUK4msRn;VS_^&vBIpC^>rd$a$K-Wu2f4+z)~q#7b)ycS z6BrwN;bXJQ>jX;kS$S(U%j<|YYWjuz1j|Q`_l9dp$8ibxuy)V*x-y>>ds%*Of)>ns z0sedZ#mz#LJ*nHJWNTHN1e$U;qz-xf@>RxVZrTmT&9PV?-&XaZWujh_O9=q>Qs>l6 zi3L~9727gn8nW_^X}hqj`h0VnY&;G>28%qs;&A}Go>SIlttQmUoJ5Gm{rG&wVd8Y0 zt(*8ll0Ht44V0QnT!L#{c5+@S1RgeU-USxjMkR0q%{CsbAHp>UAJ^>zVAZu zo!&U5uTBF1en8L70?EURxdES0glWMJZd-ROWEpT{l(`k7qrqRAt1K)<{uBQ24{&4T z-}4IMFZ3^47+6HWy;iLj87R%06(!`Krbs~mh<_L`x0L)Qm3k|_%z0&#---6sGviO0 zeXezKEcxVn{u@=~j!~)O{p%NYM?=f@`!L08{VW~vurarJt@q1KF7>eE|C}ug^73s7 zjmHh!rq~rGVLnhERc1YA;@rk8nOh`dv2bM114!gu?2VtJ?$2&(4@Pc%p7F>X7YDyN zYF=_Wch$@BCbvxK@YildcF}S3U(&k~Rm4MG3{%vykW$z5edO;ND)`YQC1bJgFHPqD zF*dt)Uqm4)K~5*kv}?qKI5$HS6FfiqabUBdRN{u|MTSC^f~##)f)DYrPC?=_AnHC> zDh?|ATv~tb2Vgp5aQv1EpXi}MZwE6YrSBe87UAfZbou%9rcBS|3Cj&d!`5s+h*{J& zHEdPRc5j@g4I0=2W+1!`kSaC#wk8E5r{=UoTjd+HDQJ~5V>p2WN0-&FS!%gl>%YTs z(6vnKn#--3jo=>8GGYj2Q;AOpTsl8i>wEle!3v|k#$3^CUn_m`xy^6DwP;Wn^-%c9 zX#6{K@AR&BXLjM`q&;1={sXcYMFkYfevty0XR2+^etF^an_m50Al%qB+_@H=N0Js_ zYYtfA?P`z9rB z%;{ee2fTvyL$FczY`5;gW2Ar_#~@$A8M>~%vP2fC_!S=*x^& zYEztpx19Z_z^fbB8ypSFKAG>nDZp{Z@7^*8%*hAEuk;-6!86^@MM<}^m6fN$hXc&_ zgZlFE7kJVOvo_kR5KJGA}|SseVeKRNX%;6#Ylho;c?P!jxR&_7x=cxTxD z+{Rm5P3vUT{`v7Gb;BN?%)Q7G!{+y0EurqkvE2bcR@yCO|6@M1g0)~ldH03KBTwuM zvjgu2mP!x`+Tg7t@QP2rz($|4R!Qk=dNt$~QsbG3pjO+o(-{`7e(VxRc02#~=x>>3 zspv!s?|rssG(2GxZTMyYzbWLZlj-|&+w&JsWbCy}dHs0O2M9)-eQ6|@gyZRFzPD`b z_9DGouswlzZzr(bNDZ4dU#i;zyW_mO$t&XF?>qUomXif${~%8%0c_8;Wx#QAp05A| zKE$oII@J;)0HfI^{}f+|v!B0zay)Z$I(nI#L;UMme!_O$VmMl4GcE9RBa`EcM(qy< z#5*%|xU7SPr@?vD=eh3N#N8!-xvvhip(H(uPwcf8IPH_9Wmmr4bq7yXod=~bB*{(R zgF>#=9gG`uIX}LtJ-^@M`tqlfOF=!-@**0_h-uY3QT2qCN@n7y*)OAb6aBF9GI>h- z^cb!x#Eqn%KbkEshl(0Y`72sEYsbm`YS;8-MPd7izraBn^Vwg?U zVr$J)aXhjul)Q89~l>JArwkG=MF@GO|D z0AyBvgijUwVR&p`cGPs*+9!MGac-5Q6AYHrmr~+;7*^S+ti-vjdU-c>qkdA z%Ii)5asJ@r*A66hcA+!D&cO^Husb5(z?XaKWV#~al>oEDKKmI+rb7O7aO|~G4iWBR z7WWnFZ!g@;TD{=U&zYF`OA3}r!6~Oi)w@1g|6&)Rs zUYq_eb!nokaV5R3v^>SW0vql;Wm8mBPOqK4G^yXl6aA8njJgw|dbiI&u1Bl&6A#Lo z-+MaBMQpZt5*6<;&*Fa>#rqdCil};6SW&1Wr`)1>qS2pVERFUHUaXl|a&}g%0=NZe zpB58l-{<89{XK7<;)WJl1qhv+hhEhpKX#m9B3i*24wB;5ZYx6m_Wa;~v_2_uEU=k# zl+B={Olp8krFfEkGJnY6h}4znpc#S%vv24xv`cTFs;p({XXC{kk$0c%B4*htu zC}Uq_sDP+?j9O>@e6741Z%4Uv_Kg5qUdJlifcy*?H$i*j&Z#iIQM#7V=(ehxq~1bKRLb_`nF(N&6cvQ#yxBG^JR3SCHD7-L#`o z`$Rw7?c(3`L{g$aP@-O%r9JCR?guarAG!q!`N#(#E_8&2?UAD&%@B*c$}LX|M$EXTc#4M zergc%R_u%1V87~YQ}*s$(A}QWv0kRE{>>~hKZ3UkvOS9^)a{huEBH5#{nJahoA5$) zjYZYnaX$E(&{W2K2skx5XNd8k6E#_Jc6NQlp7gU-z{4)#bYQU;gdQi@_*ZQp?W06$ zhKDS=fmc4Umvsl4pEOGSL+3L3>sDU}MJz9ZL*-9u-J23gnj_TLH$b%tC55%>;s^X@ ztDEtb&nA$Aw9q&jjXT{9eS=R9Rp|!i;;+E1u1(0Q6g2(5p<15g?e`46>D~YN6}U8| zNm2wqjfu;dJ+$tEL0!2t>cH5uFm=krJ84X4JB&1GE+o`(3=u-l?x7(@HnM^ksuol- zuyp!^b?^SdDjk%_C}vGIi7gtq7ces*j4>37x_*NY+m-pwdz(TB`h2=OD1c(8yiuO@@OhM|u^9T8J}PYCD-NIWuiX1l zum4c-Zm)gSaQlVJ#ah2HUEF91(R7zu5>hFD+)C*&MoD;OF z+FIjy;rma_wfR=~;ZiRlL2sc3_3o?-wf8&SGLkt*Ju)MHd8}&g*fcJ@!0%vwcn$t( zWOG$cNZ9%CesusA9`=W_Wf}E6G5R*rcfEG~)>;rqqJ^@eu$AMYFqi`-mcj7lXfVb* z{`&8vG}ySz?;$0@i2Dv^Ci)z_F?M%F%`SQ~?73cgb;0#7P|El>!ubw(wE*xat zQ+2|>s6Q=6W~%a1DEB^X|5DKHr}p?X=s-BrG!ihp%11vYG%lcn0K&T(=g>9L*u%um zsT~fDH{M7d)Pi(~yPsXrNtwOB+FsTN9QeI7@^tW#$Hehf%oRmDj^DK^;t9Vh+0f0f zHfH{M0+&l3WPI?0 zeMj%OcAV38hO3NWmuU&?UNEAIS%0=K8Yu0xb8Nog2w7zhSbbvPt)mmEmr`G5t%KKO zn$-0l(@4{JdhAW4L%<`_2UFJ?9^Lo*-}7E!&b;+e@kSw}&4aAWhlNv$iDgFyolX<2 zPC+$B08o;beYUw0Y&x336b*XvjBkkXQM}lDjw#z#8%u5IeTAejqw(o@qcptXz|;e! z*$Mji?r~%weli$HFus-QF&ASE6;8gZo3+)%1g19z<5szAFmOnV%yw&-c)GNEqOsOi z16M1+64uWEmA(uIJ>(M>@1=FS^Ea)8k3)Ssr+f&C6(GDQF(txD zlO^NwHzmWdNQF=|2(}Cm|2=nR?;`JRD~=qeWfRd8+Db3F|LWXR-iQLNnKKsSw1mS zuTtyD|BS9Fye+zOO<1#v@igIvi>$(7td#T^k4S!C<`%sJen8# zuQAI51l|*N!z0}ey9Dlmj{!54ktLstMfCv&xoz2annvwVvu--qQhY-?1suO=ux&u@ zs^30#gm3V_#z#Ahml6LZX#v|Ff)N~VntcjnsZrNcCEdzRlUSWwvFQd$ z+wZ97T6eEgs%*}|IG%Z9CyQ3Twta2IG+ccsG26p4@vgX!{A&VpeuWWS4GWD zjVw6}h}^&>%Y8x6x4s*>2>1R&yV{6shwm$Fj8N3z)lvVG+d9OqsU)wS+zc%X1j=ogfY)Y zrt*1VoK?FN%dOLI6fU6Ki;V~dM~xbcs))ccjRr}ZVxir&iPYJA;wc=WR#8YkkYM&u zXWmRp>6C#=>sx&HpbulQPcB*aI=pytUDw)az?a?_0R?zBW1lEk%t+()Sx&2%alVtVXv3Q!^F8;;J zdVyHoYNH?jL?DSXnbrOV0yXU_ts;o1@br+8zKLJP zd)3m_XyOyXUu}(FTigJh)cvzz^B%sy)a_)f+p)=}y^BGSzUrCuY5p4J8cg;nU zv(8(ewcmQnhV8kuQ#e<5?1XCNapBIFtt?C$uFt3v zw(K4>|B9t!1x2sIDFrrcfSX?R1P0n3;7Crks| z*1=-5o0vLvLF2jHy$B>3zleg!dk@voxg7b2HY`8v&~&fi^m;=R3xmXc}#J@v^Tz zio;m`Fn?J0EFCbxIaE`cj~E}sxD^dR%3;BFhcdBE*<6L+UWZK%peM}`<}_P?x=LCK z=CAh0;5Pwsm}9-_G|V0f2z6=zfE@M*rNr}mLV4b3N6Ey?_so<((QWU>06QADUn@V> z)^xQT{?!Zyw&)W#Z2}J-*%21Li_KLgG z)N<61QsT4@?5Vb866L^B!O5=*_lon+*mBe5ROrQloBgDG{|U_W-vcI-!&Ej8TJ3T_ z_mt}!l;vr3-&B(JojiwEwl$~AM8qJS_f}Wmii%Q8-{LQ*U--S`y!T-Ig)C!V^?B2G zpu};rmTv}HOozv+*0SV^#i8z-P_1#|v1WN$+>&X~Sz}#BhD*YdA47=B!dbqWP<>@>Hk!FhZ@1ev_d87+Hb#2H!bvlO z$pLlo@}Pe~^XGP@6iir1NCOIWYM{`XjU9Yh{g@&J0C^U468EVCGm4!20z80 z2|H)V>{?qH)ymCa(R;u-L@RICZvp#-6pfD}l(O)^9nC@D0FVMS$7m{OZ}6bw9>u6|Z7Z z<)2+`gxSYbH8-&FfTlua@#B9YMgzZNRHD>SDDPMAwVZPF zp&Q%qImjp=T`D7x;5t6@}^#F6hPO+#3x9URtNq?eK#97`sEf5 zAuItl$~QoBNS?Rn?cbv$E~TyxFljr>LGP0Gz2%(PmivlKg|UJ_Q|TO@|GOij@O~9? z-7tYS8<{E22YXiy9=fo%kD~gBwyTEBbH8PCA2w1E!z%bH=2werF3 zApUJ4g(By z5!2vj+V+pO_qzaw^8r2fv640Rma|s0Y5S!T(LEap&XDttHN$ckK`k2s6ucDUvmX$v z$8_>i8%wIx*_%KOwgwe&0B^$J~DYJx* z4}jK|&j$?s%V{4V0Eq0e^K%>$>W^ax)GN?>=nm=*h0W1AqTt7s`RU>&TywVZ9Z;3j zzW?5XI)1HY%%S;$(T-Uaa0I3APO+RDA!^UXzP5Za=8S0+18Wt05;u{}>mSuCvOUbe z7cvAZYyFGyiy-1XLg)jIPpEz8C<9Vem;RYlS@lrO#^!RovVh5CMG@Y2iD<>YwJHju z{b3j&AHgORPHEd(9a~@lA zs!jDG47tW@VcP*y`5hN~bvTRjAdApO@QdPo{-1ju3{belR*6D=TYYVPWfo!OX7=dq z7EXckQY^1!0m*pgkz|Bx#NckHzs36-Bch5ZG4ju(wk|!^v%qd*ktH2{r(Ck?yT!Mon}sW2Z+O=lG6lYm5!$1d zt?S-Yd%axVH@`n)UKs~yrS-(hbo{w*(Z-AeTWSGm>8dJL%$0=9J{II<#B++D!O4Zr za}4^0!L?LPNZ(Df5#krAFbp`G{45!NqVv#E%YE+_A1HwBVs+N0j0BHkVdT+Z27*-P zmsZq7WMGta|NQnvJB4)x&>9av@l&|iE7&9xk& zV$*uU{14OW$$C5ZJp+qm>y(CUGDy))(XII)&}&pzqJqUgvgJm*Vy&Ae{^q2-NbL0d z)X6}u+Ynn+!Nk+CH}OZ5IfzDVpbQEh6HD;#8PFX`|jS%=flN%iK$3kpvKCa?^$K zckDnL&Wj`MS%Pxel-I(KCf_%R_8gGETo2kyt(_f7 z=w20jtg~hZVIzawupqzy8vw1YmcUPCn_D{|D*>Lw9FPX;jNp)o`bbpz&r9BWYmm=V z58tQD)5P1}TGs6zAelrk3rr5|D9LdSaaEp-5bvtd2VpR9a?x-eA-k$S^+ zAl6cC(k(kE+nV%Fe7(g{y?7ry>Ah4p+)US`uB0$rjJj+LWg}qAVKw1m{{p)tyUWlt zj*<}#2{kD)d;pLddlq-7`SmHB-+hA@fCdRs37~69J(ZM7T+320xOOs0D;Eiwf~ znK0-pfg{IQQLHX*XsEHRit$qk^31eym{1raCDgbyp5dyMbrsjUzg7SRV#`PGyngAt z_-4PlB7RirFrAHGRAG_R;H}>zi>l|vf84IK4$4tn=m-pIqfYfu*UGo8b7y7Uvc?74 zMY;VM%2z^LpR1&=zh|Dr@S@f#<3aSJXb1K6NI<|1c9WGFcT#lqfoCor6FDT|Nj7Z` z=zHxG@qNQ)>y#*P5(eU5xc}--c`IudiMr!ca&>nkP;MIsU?s}ajF*Z;$-Mhh<#JpM z)rC-sR8Y(Er17rLT_<=%;!8k5VE>X&Yd7B5?yMcxH{wTC)Vu=e(*cr;M%x0|d~UH~ zYY3$&g`>?x;XlS__%d?PYW>;=RNplZ6|f!$N_^0()U34CChxWRpYn;JBJWTH9sfmi zboqXl(r+S0LItXLfwQct7jCcFAJx>!+u8jk;N?-PXJ1i6Cy>U*h_q;VSU8&N_(0*6=pX1&nw^Zw0a~9G z&t>x0ve!U$UM(G%PES;s3uuY6_1VIy;q)nE*mR!F7j?V9Mn(yhc+EPr{#RBfeaa^94m!e*XUm!OJQZW|w4VXc z%1pJ+_S5gu#E@&Ub1ejMYgIS+Yk~5m7vcxt>{VQBSTSBO!W|xc7Y9v2n=8P48^@sc z@Gb6)!yf^l9&>&RbVwFtxq0Fuq3#D@prx$!bmzGpu$SRUDF=*OL>ji7GqT}Ru(mFb zEoO!Ez$d_tk$B*k*Rvv>>+Ss=^5Ia2Z$Qr=LK(B2?~iGJkXJokmb(dgsjPEy@=Xxz z_4{cv^N_*oC6~e*QZrxr_Bqx7+rm?DEj3wt)Y0c^pK7lZ?RqFUkTj_9i&H-^_AfQ> z0{p({)P$6o?LSfz1>lqefw&8!w}-%kzIp=eF|YQD=m&?7suQ;bUXz{t4r|&eP`C~^ z!OAJG`M8#NNvgs*#(>@KJ)^}jET0=H9EV=9`OWaK5cTO6#r+7 zYRR|PllH8|#@_c5rM1rf@mS;=>-c7+vmA9qiVPu+aW+Rcf!eC1%aC6zU^-7#1LbvP%fXY}sGl)AGml?n znjhBvg7>O}6Dj5dJuEU@*dG)T5Kx{Q~)~x#U{! zv=_jN#13_QSRKrYZRzjqmjPz$kb=F&r7tCm`ucGZ-G23Sw z)xz^EJSOCRN=9|&&2m3(6nuQ$Z90gX%fB#19W9?0Y?N~R$RBZ+_-^OkU;ODs)I%Ws z=XBkpd-vmYy2qCPQawC7CU{NL3-r?Py54JOYvKCpqHFVm(Nz74!#f@k_7c3aoGTE| zU-Ippr%%zo4!aCbPu{iG;3!sYsKNSKq^ zvvof~qiS0gTWtV|m%3f=SM0cb1sG+Bwepr?JJ?@gvDB;Aih=`vB`cinEvGr!ZZ}XJ z&XG3a=J$qXnTjG_GT+A9j*9aw(Y}|wv`{ye92`jSMx>Px2PewNHl#^i{y<$#EFb=C|iD7b4*m( zr+tuJO95AhM98Y+AM@a{dLUc(Be1PJv&-idyTq?-LzL;8?PvC!@=7oW`TEgeW6t#6fS#lb=iRnD z|LBLoqOLC#E%zsnf-MUY8`024s7-3oRG=yJ;Zp2zw2 zdM%jSuxvWV>PjoCsjXWTP<@%HAgTIQrv8@?%eG71_%>7eAGtr8ZdV+U#!Nvr1fSo3 zus*4+;mSU&H+DpFi|sL_wL;o)iL+%B$)^z?-V%_)Sk`iN&%QaO9cPpc)s4DJNI`g~ zLz7ER*!lVBpE$}j@89LHnjMb2Gwzr|ct#hH%t*)Hd@gd$G6=tq|G7xp%GxvJWJBRa zr~7!(i#EonLu{SW^7}Li*jPH^6n9U~W-FRIQ%a ztndX`8GdL6IXsoz09MQ|Xk<)iKrh`OR%iOsiedIE!M-b-R%y z54e^ShGDa>4)vBju*0w=peu7tg@g0yn2(EpB-@0~c5J_jSF9!^jF0}%~o2WIpvDx9RdfS7WzYIt2-TP3dMB`Zv$9@O^4P1 zs261YJHUz!ZD5zkw%=)dKRwWIgSLxq=B)x;LxIbcz3)5fE8G)~kWw4#Bazu*Jv~Pn zB3a`+_}7_K4-%tH)oiWhx;C~#0EDz{iMN0KFCM|r@0-`sz8GtCVG#Vir~mJV8Y-zZ z4_A9vc0xufj92W3;1TNKvheH$HPBAfHRYeGJ<>YoeArY^52ICm515CU&QFp%w@4!Y z_y;09S}_TSr{M&y{+<9mmA)$y=8`R_2s$5p%OhFBP_M``R@fTGM>>STa7}a|c|3+f zf4N2$$^6E6@^tioMWe2h z`Q74Y5;hK;rJjP*J>uA;QwU^vOC1GsQdWmOI{$Boy6s(lWGQDH^HuMw zr$mkkS>HaEd^qvlx@Kt9029yJ`F+FdHF>Rd$xR}hU=8PB7Fpd*=pku<{4n4Wu~$6G zdio3OnV#{VTd8#@pG{4pp;`0Fa|)9k!&#vZPm8CVpcsA=!-r**1byG+-}c`t3aTq&|%kn`WpJ(Kg6GaW#x-M ze}aXSEyCl*_;T_YyuZsL-V0?tRu*Pmm%V6e^NqcN+IsVFSWRO?ohTW$_91?)<@*LF zE(b@r@2nqumpdOy@gIg#MMz}x$sUt@5!!{=He!RBgeByhWPP;G0dgRksxmQS?cibF z0T8TxUaiNd*oS;a6(cVV2AI9VS1l{e9#rEJ+M2NbMl8q|Hd(1asIS$5KP8;Cz={(f z06*RDAOapwm}(h?-ZcCO)pP6B$4|Kc+$FoRF3G|j{^La#I06+_ITEkF0no&C`&}9V zb29hP3&7j~juPU;w6fdXBkGC+G!?}?#6QAi)HP0fQ5^hjU-paN6zb-`-+8%3RbXOPV5gMQ zyTiMOZ2V$W6iXI)JluKDm+~=ZLOxOArvjmiQ=^OaM-7D*v*t0Uj_T{jC@~(}axzE? z!Ynl(@Zomb_pHIEM)2E$pzfQxE%L{bAFMkWJ}b?0vU_HQ>lPCq>gsKfsH zyCos&<{vLMma1u07>SG>dV0+T?|mLcg%&Aa-QkbkkxA0mrUGzWb$y-WOg9O!uFhLw zxu};m2B%wipsNw1{}vO<>f>-kz9_|g;)1ETIg+rR8{qJFJ`|EgyTnww~U0| zlpnAU2P)G)L+O?m0ITv(qQlar*rAA+m!bhhv-+JI>t{Ti@d!l@v>6cpaaTs)3RIAG z-LnKXB1Z`(wi~)$7Avld2V#<$9@J@#e6|Aj3XYjVeFVD-vAqtxf4C`7iJwX}R9-oA zKmSla3;Kcl2vb3WP6@NToRS{Su2gpsZP28A(?AAi-mSjT$?=&am zl0&mgCABZ3uP6+Ft?*BUjd?tFxn{Z}-OMpi5Y(FSNnJsDg4o0v<_F|q3XLU^11q>@ zSh}=yMT+dYQzrNb9#s7;JLT~l-a900JKWY1|a&lMeiy=U0@_04&Aie+X5hJuad8xd`)0@W!4b#Y{Lb zIQP}^d};OyU{8mEF(T|MW&>qoz<2$!-Y#iPN$@cpKdAClkC`SfUTM5?%D($6aHO1* zXc4U|ez=jyMK7t~at;~MR2rL8pHOgcqH*!A>V68f0L+h?m7P8>FnKZk^R?x$s?%)c zKHt~Wom)n$BgfhJ{TfrZR+)~LNPku)rWxQb0bVy~@#MF9HevYzq!`EK9H*@VY@;dZ zYbs$iFBFC52swF^fZf==>86oO6yi?qYLbd&DnNkx@=Cc7^)PFtEg7w+Y7P5?CnUZnpy_ zTpHFEON905>TX{Gd!BeuSbG*X0UrYB^f^9Is%N1fe5?n5c3}K2NMMjJINnE`6V@WX z+`ohi?**IoQrPORr-bg^`+4*BSmcKbssyo8J-Pi4v$NiFbA4g;!J=xQNY28{PqmyY zGq;3|Gz{f6=#@Uky!BHbcfqYoKFp-V=ZO}Ya%O0O8IK}T9z^$Z@P{~VblKN6z819> zRl}I2cFL|N62ekOiQ1W}k^`=WyLhhTs{Ub>&I8HAJjw~v8fi%Ukb!})C@{tz$x)Ok z%vAmvFuU|>^noJUL-0++SmbokhwL5B-u#tEe5_N$bLE4RoY5z*5#@2Z;k4xVN%7>Z zrc(RQ#J#g4=!20r4V8!q)Mr(WA^M^!kR@ zYdH)i!poA%3hb6U06f=EszFetbzR{+CP+Pvr7_K)&)cFMY_BDUj8xX2VT~0+e+mMH zYT}Kv$CThUtCTAdxSN(S$NKv-muXpo00KC4zn2CcfThx#ynd5b+-{2da5@3La&*v@JU^r>@QyD53o?D zf@?`p?wA^SuNI?mp z+@q5d#~_tbSLQq|r&90QbH@qzo3WlTuJ&xd5?A2p;}-ew#}~b`fZGuIUrkz%Q{MCI zbd>kniBnUDVdkIuhaclr1FvQVig{b1C1r3WF3WG|A^5^4g?VrIK#`kG`G-5FUFcfZ zvkvqY5!|rK=W5BW#+S?&Kc9Z^EX0Shh^v z|L{x*ZSAAMj|Q5SnTESSB=-CGSi_HwL!T>4>rS0|p1ymy%ztZb>APWfAD!zNwYpah zh2u>zO8j_6l4(k;vq}@v@%mCOKWJ*1qSwc~ronn1bvabQ2Kv96+MRFmO~yENLjETW zao)j6{9bnODrBSb#Y4%*b%4Hnk%e4-`_^JXx#yt7-7=*gZ)h$dFg* zBE~5)HOs(@wi5}CQP)sS9M}}EarQk_);jxeRz|FXk3#K>q*3x87pS4nVE~8P4aC%P zT%Lv1cB^$w4M3D93sljTP^(^W-_M<3;4@_rnN|U9dg@aKl;QoRTqC$t0GPv`#02f$ z&)Q*xK7{30nP3|g1%2|>TJV8s%>G#7Q~uCNEf2d{El@*&v*=3Afj7ZZWhTCz6fXy@ zqegz)KH%dnWDSbda#9WzNidHUT2ru%!GcBmU3@WiO8&DzbL2rcSik463T<+>zJaYm zuc#i+K1V+;ySXUuPpZY1PoeYoICY7KCoI56@y@#+78f3Xl8Z&diPk8BW34DMROqr) zAB{X={vc@oJbrzxtQ7wWnH4DVe9-41#HbrG)#4H=vTI9sw_p5Ryg8j*0-QQ=uGj~p z^6}`%g}SA2SIbW7?xrn#W{U`-8%uWJcaZg=^lDOh3pF7{mqo%RpuA_sN*FsIUNHT$`1*@rTT+c(E(mEB1FnHUY`9bkl{&_A)B z{HpB4c@s^ zNzIhFp8cPr{$LEwrhL(HlP$H8ltbRVUH!RJSRh@`OVz()`)Fzr<5AO5%Z$M6CD8K3 znf(|Jlesd=_`cysz(u1`*LE^lZm-L~U`eCl%#y^vU`OZL?x2RFh6hiFpz3BGN~6SN z#z-AXUnAl0s&ARb(Kafd`ZSfgU}`{GoC2g+Hiyf$#NHqdKmz&(|B_Yl4OLs6`94!4 z)kBnDT};z0I01VpH=2U0To~!KqpNo1Tq7_?o=04+SO58ToCPP)6IQ|Ss0-j$#Uf#2 z4$6T&Pl5MyFS+23*C+LT))zYb5=-tpaKUksS_iJV|BJMmx4cZ$LOQFvV@SZ6eYKq6 zokUjYE1JZZpL_#lH>VI=V%=IiP83NYZKHP{-FfjdD&M4+`NJ9T{51P{S>d9%k>0(Z zSmK$73W=n${-KSs3nADE@<*a(EXA*uB)X>p%(dAd<7%sq4{WSOqN+1*GtZeDBTkctM}aH4F>;>YxU(ns45r%z z_bJ0nG*3AVGbpjnss;Y%ReK^3t8V``W!;?^wFn4RvN~^Q{rh0UIo}MfH1UTn6V_9= z`6mr`$wR=))%cJZhngIp5!0jJH*~?iZvcLnHSW92Jd2LPjCb#)Ql4OBQu&7!a2wC! zSV10c-Rx~%gIxmniy(b3Y8$_RWGN;mdBc8^W^DbvuA%sm__-BIfLnW>YRz046oG_4 zH&r)_wcbY^bqo>t`zdvJtd$e1bk}BcvWN^Dw6zcjry;E_m*{O6?eai@Ws=E}eGQnj zwNEJSg~KG8A|6oos3F!-wT=6{CpoDXw!{=&Fb`pHhDSxz5$L*tP?o;Km(*qd`%C8u zSC8lM!A;Et!*eM<(7BnHj-beeoZ*+##)gpLHJ3{ak3P}<#GynL4xGRJ>mvYnA}5s< zUsvQitrlF6G&&1rXDZ~7vtCjfeSYsT*!-Wj5c=Dun-)*YiSB-OtPcb@#`Nu&;ALq zLMwUe+1;+>uTv%1j$=gRh=^1{ZH6~4^8Cb$pkDd`g|+f;@SXYsVW+mG;z+@^ClCX$ zUaT`$JNvKgc0f@(`EkhBH0n{hG|x+!)UT5NL|l69u!p7zLas2H{mXVzv1C@s%uwqp zc_0*dm!brw3r{!jH9H9)|0lW(Gc3A37c@0CAew{@7>tiHS;oB^ndKJFJ_~(sbM#pp znp96oSBf4r)}3Ban*XT01B`Zj?*nL*wNFk_)=QE;Ob)kCIe+eX31>Lo*Z4?Hd+tf= zKa`l~xHpn6TKCt`$gS&fT&0izPq|F17O0Dh`CKKichYGv&3d=T$e?yfe=m%x6w z&m^hXq5iB6>WhbFzTX2Opxwz)BEIq3ruSM7%&?I6u;@}|_C4Y2wS?<^0AXQd@;6;k zyK1`ttUUU5b=o>GpCV)tUoS1={sx95c!~va6!@j!X=Fc7dYQZ4y#{pvUd<}0hSgI`R_ zY_^y1VK}V0`U7&=yj82HoB}~~cJt?B zn_)HIOXzjRos%tE{@6EmR$|-1;Y~PxVaw!=qU_1iU<7)w$6! zTE{f?7^{7V&=y8e5!=4fIo#8W$-sP%HhjUCnm7 zjI6b4h0ki06sQn4(WIf_)4UP&bAlcMF&Erwn#=?Z^Ny_6Ke`}zV4d`rC|LF{V@$0G zu~U32I^~BH=)B&c*&(y_-vuX-U$e}!rb@F=M?hl_2Sx}FSV2f!eFCVa{EiPzV>Qn% zTiyO`k)^zDa5b;-6p*;pysZWro6L}u2)%4RpZHDnJA7Tf)g%9&QKcxxV@WocDM>jT ziuHnhW=bTd6Suv(awB|ct!UYf7w11@N&>|pKdTAGUK!+h53`=?C!Bw`K;cwgjRf|0 z4TB~|jA&p*k*W)JqxQdZG@8r$=YXh`%w*Up69j+dES#M%Y>Z$k5s0>2U{eL23Z_C| z@D%(akciLCyD%r5j}H&0j{;l)na%wZ{+XD0zEtAQa`CR4SgM%7eV+H*-b&EqEdyCo zjpE00vE97uV0n}$x(`22i&O_KVHm#w90CmSNbD<~r4$lS%6JWaMD5|iG0$kfS$%PX z3LLa}99sCyU*3qmE?ma0isfBFHRL8T(x>}wMJVgpE$l)9rD-zgO-ID_c54&qei;W1 zjM1!{2$xhI&j=_mIkAfFpA$!17h19IMy1o4wm}_$AmYJ<|Io0GCz1OE{MAG#{uD2~ z`F>}UTs}FIEFUL6Wj{$b`C}QI#UlWi)8wx6`WrDt?&!dd)YHw66aHaA^|NvF@gRa` z3&iVkeD^5vp{>i***R6W+@tE|PTL7>z)r)u8LLDB?#cQz50P_Sgm7z_yCNz9v2Iac)EZ%0EU`ri;U$6G^@cXIfY2XXP>Xpe>B+ z-O|q~W!)KxGxY@}`dJ-khAghfJG~uoq-0mE)@KJ@(D5pLK^gUrM^vK2Eve+X2SSk!OzITn zcfPlOWohM;j+)J$4`x3kprC1)l=s*zvlx!?R`~Wl_R*I{Htw2sm0sC5mORAOvQAKr zFNMCe^fsmNdM@}dVM<}<`8i{{sZD;0g86d?uEjK2;zrMXc_uk za+0R>QM!x*-Y0DXfv09EG^0-%dfsMvz`XT>(lrqh?65^!))kT9Gg8*uR0tkDh2H-0 ze%($hR*6I6NjDZasw^ntnwWILX0~j%e`8q1!9TbLm{p*k=Dn+szQc4YN=sR6f7)S> zni}j;!RC5k+zwG2%*Ys#tFNp3#m{~H<|$dMHC?gQpF9?N{w2!o6(;C9Y~RMESNC9c zv(KEBWhT9Oh28o|ghENZGPgQ~{?{~Uzg6VHQil30jx%Rm%Wj8gr2&fWyI;dbE?F88 zoO}nDhFd~%pSLK3kwc5C%4dAC_^1@jSB!;d59Kkzf^BHAGjI1yFeOH5v!I9q^jv-D zEp>27nC4Wk-qh=&j6cAYOJ%H+vSG{9^9}8oFUL#>u@#=v27QZ|P_E@;^$uxUS}ZQ@ z#PL&Be}QwH>cieD04pp9V{W9x+pF`;D-45 zP-_Arp@;xsa-g}P^#uO6%%<>5LMML5cB^c!K;@T{KnxGyXSU2DQpR7pT9|D^e>M|G zVRHCcwR0n*rV|6xsl){D%cbtY!n43*7t0jX7WUENtKeZlVj?^^7H6z*QdUy7DlGSS z1Nv%AD~!-KaEXr?A(^r+05q$1?g^pZ{Z@Jj$O98@Yjc$6oT`UlSC^QN2f+YcHlUUcOBM1W1k!!r>i|pOSM?8 zr;P8V8ruUp$(CyhXYlA6T@A?f&>oY#(1EEvBF56X069o{>aEFKKhq`qj>X#haKV?c zj;1K&(3EeX+*EDgj7)g|Vab2{eZ#lYMidK;Qit77h7F|!BmO5Jfs3sy7ub&z!~Biu z;JT{xX`m9U37H+wPCJ2D7G=+)KfB&w>Sz@+yO$K>1Mkr>rfDjB6q2E%+6CFck#(qw zqGlbZ?JjV&#d!09Xw|pDt^G8ZR9K@)rloBThiPQpr)q`IeFJkt{K9dbpDS&t?c^0Z z%C_rGmFRAlW}JN~TC(^$eP3+ol=0T{1%b-swK|x{R&F*Y0qy~l2|9hP`b&O-50xa2 zM}j93huJFS8ukqOkaTvs{=wxiR7oHyJ8o{UC`pw-FW6bep(!pm-#-Z#A9&e% z#pL&lFI8YznYa?&S-g+cL6%jUIUQuj$M#+d{26|tgY|<3pcBhU} zsvdU=<(c3)9g9zYvp+9RzvmjtA;IEc5D~MPdJ8uK2-@R&;}NFNLZp!vOY6;!t6NQohD~5OeitNhbT_4 z8}+-N`QFZ7FC79S^@wgCfAO~c*)K<|l8?V_KiR?EMEP05{ig1H95OnsLrI&kIkzT3 zMq#3wmkn(9?R@BI@mbX~;lZL1F~M|Qyy?JO(DnM0KzYRpU6b=L&*fCHsQFt?>n%+S z`+Q71p<3?ZuOJq#`<^IwiEj)Zn_O4X^$GOR8fEnX<(x-}?q(M+t}6 z#AAd(kMe91h#BW++pJHeFlxPhyxMYEfIbvYXrg-!I3m@yTfWvAxo8wQgO*6N^nPR8 z{_#L!cNzAk?b2RjsBv!I#M*2)wF8vg7<_k5oIN~5>gG$a&O5l_drR~^Ou)00E7rSzZ}|Kt8v0-QebD_(fCpbV)!&*82P zpq&8?YI?5!znH+R*G=)8u}8Em@}Zf4lc&lIiMR#d%d^vFLO{~)Y^ib>uGhr`O>uEonjCAmneZUT1}!9grdx$PhA9hGHhG~_fgT#WzTbo)Q*@Xh{Jg^QGf z0|@hkTfK(LGpnWsOT!%db9T*u0Rwfm7qFk*{=+nE6DbrvN$m7QYfSh}u%sZ`^|*$u z^;+^{g~rVzl~fw&PJ`tc>NnX3fVSkV?fC77)Upxm^j-p?F%A{K%#)%m&(;`hGn*Ts z`DvaGcRkQohizzZrZkMw7BV)l?O*lU2NRWsY zSu({>CBOc^@{{fGU+>PO$GhxG_WZDV=gGbF8aji5yuEt1t5Bw*5tRl`eOnY}*&KmF>bkmZ6JVn*BDBc}(M?wIwSj78&`WLHwc71M- zu3E20LVbu0+`cr+hV|lshfwYx=zRt#XH8i`Ila(UR{(NkOeGf9KeZ9j2A1M6qWVss z3A|5ksHx0%3U7#N0;Ys3SnHOb)}-&!0(a;<5rfz-0bWI9;ePZQs);?!nurDn4$8$r zXlOjT01mwC_kLB1;wF2{WqU%7We&V6@QI-(;ihmdC%6Uyd~K?iyAKTk@G0Hw&e_ER zGguKsNBbmj2ZNTlBa$TwJ06-#Ui@cq&A$U;pRu-nf}PH=Ur;yeseIa#F-aZer^?(e zfk)8>x*~~3SNut!E`Fw~^z(&(i-~DK*K0Qfs@a>2c+1g;2lvL}y;ZSY=S|g;|`vSvK4-18YSJz|WR5%Q9Fi@@2{ja$6e|n_{yC)&8u76kwol!xz%E_x_NI#E?`4Ca%kE4UW0<4m3 zIBaVeL1?lkf+Pb@&{Y8M^|F5o$BCY+tpTAthre$al5!>NBG^$AR!VZSKaclx=<=SG z77*SnK4CBBv}iib$&ad~o>R625LY+st2}Qspuv3TyyP|cgnmVi-Qs zh(Ic$R^*^4>>1qX9`-S!{1VDYz-l3C+>Jl;ViNK+XYc5~=6$Kk!ZXdA{w`q3m^%dC8^+`sG--c8RwP5ejq~Mgh+_u~X;J$>DjRw#NXvtk?G# zU$Dn-QFLW@ftcuS1+`m(Fv$?Dl7WV0<@6dj6~wfaTp$|);^Vw>j*vV;mH*t*5J5xSu%(ylcP+h;_ljiV8^7w z^iu*<9|@tP1cpKdXpg9k^5%iBEq8h`t0!X=V4Mnd9mv}pQF?Jsy6k9oG(UaONIl)) z@*UwD-rA%b*KHyEmSVK%NCVA|Rby6XDf|&7Q?SPGJpUH*6A@$CuMFw5!;7KxOFxZPGwF+^f90i?uqW{gu~L1 zxL02acRwvUKAifJ>n)Z0w6ANDTVnapNc1tnErD-^) zW5#m-z=}nx{ba6BS-uH_ivxxaI(Ui?>1!L47pBXnwX))O;u^h>KFxtmCx@ja*VEe| zZ!vK#+5Bkt>u)`uGUf7biQ*u{qdhvIy3`$U)IU_(Xu#G@WwodcdX6@XorCR=UbsPe zB5P}FuszJhW=8^DsV2!jU}*#n7~2n};OhLCvb+E_x#mu(R_5%GeN}sST=78;^w+tL zKQcqL*A}T<+nosOh-T}|@Peg*k*3qbk>KppM36z?;sAfl$m{k|KmtGj`987e@qaw3 z>Y%U2^&Y6sw%oulk6Rx$n>hc_UL_5b+oFz0A=|gK`u|dya7nL0RReT-5^e=Itd=Qcs(|Hh~EYx+R09 z7nM5HNmwEB?%vJNRhrd(0&f+>`15o1IA_w{9!=<9tH7UGI_(9=ZHQwhuEP701`92} ziJJX%Zae8-mz(GPQ9MUDLmySIVwAtWW7j^&e{m%m+K}^evIQWDZeCQWrDn{z`jBs_ zC={#4&sng+(8|n^MsUa;)YgoxW6Dk9bZ}25lhj30k27XRR{XJQGou(eq*GHgYIW zaGN{NFsCrFqa~rseynao{KslJ`MSoZH>Y3P!+(bGTS?$>gf7 zw3DYbQK%q7#WyKWA@{$?Jqyvt?+dDft}bXTdg$_YxaLHoTH8%!0Z*ENoDg#ny6Wt8 zo}aV~<)`&=hA_mnmGgD55`S*#4lWocE0uTDC>etVVS1#}i;H*oh3&InvxV~H4lrlY zt!FrGL**WtJfQYd8n1rt6}ql zZd~}2p%A*&6KgVU{JP{dcAGe2FR>%e=Tr}$R|#*u9qtB^OV2|5ZMd0i+XduFPH8(* zui#q~MXd21tV&vPRYTIIZ-Tw`uT51SMxmsKJQ_(Dvof0ZL%!(k6!h5hdqIGYY|4Gf zvHWkB$x1JDnAbb=^^l@Rok70?(Bk~v+c8r&w~CKDA1W|0n!O&i=-rnF?*%`sr{?lw zo@89O^TaFv?i*UpbD7O~D@%G=P5Lj@-&NTx$@_~gj;}{JJ&2@XnMy0y7tIQBbUqOS zNYa(060e^VTGaGdTQN{h=_EyPRlzy97LNY%k4?&3Hi4>-JLFtiyh5c2LH>2zqBhPtM)VydGdQn)_`(7>{*9X4~Iid4+i0g!xrq;F}z&uK!Wy7k7ncr5B zvu`#kOc)-g0O2M=ibwynj9*0}Q}~Plk+nWSgwKu7jN-ex3id?kq68U z@BR`QZ-0Nlz3PN@OR6_fZ0^?B`mt)bT=yxg7<702Mra?>lc|@dy!xeJvX*$$U(ZMp4Y(1G_QetSIneB7h6#j8&Mwb?PMeuYs0jB`9 zkpYQ7AnlCAwcqgws123dl=6g@@$@!p2Du$~MaaC>U`3Mm_%bdqgsy-6h*^);)*`l@ z6~bDI_JpXO$Qaa(`V-HPL-t)}?`-xwnD;-{SUP@Dz3gTbWMNEt$R7C+c0!;Th2C$M zxiHr;dopcls-$=G(X-E-G#(`F2)j9o^f}t&RBC8AQs}9%aUNZd`1tm}S-}6h)>e;3 zUn7BGZyB_er}Vqxev?@U2qOXz%S4({6b1}kgV4IpKsdE<>A5gsY!V~kWWesGbg9}b zuIoT^@TW2T6DR#`n@MuwI4nAM{11HjI6!i-+C{A$$!j`{*GU1#!s zm#vhbs@Ic)Tk&V2FwG0gi&WY&um__rgbqK}@3M9p-Eg6aTrbvgzcn8qHg|sUqt<>e z(`c22H5Yw6A5W4r-CUsJV>zjwVbg&Kv=+o12LB6p-tv@7;>(OM3i<(9wZ&%j|3}{Q zwuA2?cZs`j%Esz5bG7M+9gvj>y)4zOedgXf1O=F?1jT}`ps*zKvN>I@>7O8i4RC@@|U z?db{}kw0f2kl{T0mY3K*9agBNPHMDfVL3%Gh0Z<^W|VbzG|aYv9uDQQ+|6y!J)}ga z5|Pxhe=rJItn*lo9GCc?QGWG;VCZBM$1~+e&l*KsvE3vqhSN zMr3gw#nN=N-Nfg}dGAHni=n}m<#lAK?1Ql3mZc?nAvTZ}?MKbRd!)qTU+3NYQrNi0 z_4ubpaWT+`1F4oef;b5`mZU4|KSqNH^MMW*oC_WWeR_H9JxxRc<9w_1*W29 z?_LA}H3Ar!ItyCD7wC-1n}&Cd7|LCy$t0Tv4sX?|(AmW^lXfFJlc@oES5w zzLcUc2Hs)(Ly?VOgCzJ(VtdL9Hr9hG0f@+u-ddvIFjaEcx{4>>f$Hmve{Gs@f@4Xi z;;N{`Qqo*uZ`Ovfmxq*~znnA_>C<}lOeSuvXW4V4LO-g7kIn?i(fAj|Q zXBQ-j2{iFy;E%nm+?Ouap@mUzfvy#!WilvFh5Y0aGgmjVIwRbSbyGIbyWIRla!CF@ zUY?@_kJ3q_?5x$w$6cfY*W*S;ziv*VNlnU6BjJG#S6;6YlB^s@gWO?v|LF9$#h^J$ z8=hxjKpcmHBaEeIkYg4?qO?22?nK_yeBj=G#wKh5Ws7!AkkHfDuI#&Cq8KU zOn^MZUOzH;w3pr^$T4!N3}AkmA5*3|f*1TErhm>4oyA?<&Phd0eX(rwDwYPw;t6jD z@8_+MA`*(_CWm@Br*SpK&l08M;-)6N*({<9s2!l4*u$|3)LAyG1HIE~T3F$|7KYwK z>zC$D%gINXKp%|H2f|P3@IUyt8!eTf;#yY7go6eJrcVunnxqePr#> z1a00^kJbD+Z#F2u*%42!9`00z%Dt6wKF^>I{7R^iSj$$?2De&isH$%SlxqGT_+G1w z*WwU+tVYw3K0ukOK ziv9R3pg@WtfC(ghj*KZa?~$8t*($m)OLr9*eGRRm=BRKJ>%b?~1%05L_M5sh{;-PB zZ>qqxDR%!na-Xrs`8{kjvWUo>GqE&cnM7Z??a%)J4-b+E4~hwz&g14xY>^0ffj5PE zw(flOYnChJ#!Hc@oX9N7kO_~S3+oSTt#ebx@2o=!m@4MqSM)Ikv%bkjQK|e!cMT>U8496_-x2?PaYrN}qbC>5S)9cw@Yq|ULxL?Q$(liTJ63;L@Tq<%TO%##$ zXsbVYq)nPzsEM%4&}bxIJ>9N~c^YY)nZe_F-~523Y)zwm!n;@sN`Ro6EaQgfAlN23 zS=oC@y4W)S;j-m+iaj%?Cv3=VyAv1mC&Jur`|KPFy z0H+3$NV2?GsRyw}RTN~Zn z2p_DmSA7ur&~E;8%5{k}bg51fYG*F{>d34m+O?=0?(Q{9=0jaC^AL}@5OdP{0KYna zmp{U-ljLPp7RW?0swY$J1@&rASw1&kud%w&bObL-n&Xwrm@#O#){eFM9(&Vs3%g6= z2w2e|O40WI!_BH=_I58-&`jkYkJ88cn;EPZfLT2bzn+Hj z3T!iMm%sSD?tQYLJU)Eos+oh$sbc10ZGPH3CA%i~pjL&uJ=8c~Y-IXa0AP^s$D{-( z;9!W{6U06pZpwFyD#hzTP2pg^XH;KT1?}46SaEMEpmcslp#W=C(NNd*rP2{{+x^rB3G=)!Un*niK9h!m;Av5^ z6InSt+g8rt;+(SO>jHV@ASbi3H=Mc^(w>VU$DRC>Uus&Gsmt9cKDR~&CWb&#dfyT5 zVSMK~=t?y<(dbN3b$jBCmX}!F9}rtrHMPnGzlq#8W;>_rg?rzDPgtBA|9YUhL{c zSA9hu_$u6+ch;}r59~%Eb502g2ylq(DZS`a*f*cUOQ=Sr3wpb33}!W*iiSGOb$gaB zs^2G5{v4@z5s3}D-R2skw3}WYAAX%19U1-dOTE!jn*qvV=81cU>W_z#Wg@4Zjr}+! zvv)VSYkcZqDCRc!t|_*wQ@eN3q)Mqemb(keX7YW+{C-}Iy}-V493!D4p0$N>ocwJP z)s*%LF-{}llLKQ9N6)(Og452q4dSv~FDi^3nf^C@ojtFLTE!4mOH_nu0P{snDY|tF zNqo!1!iOun?k$RHnB*;hQWHdq#50U{70 z{QO6mkA)@AUC0dBUy`vX_-hjnxG&v*`Cn(cN`BmT_x_U`*{0LzzVP*~Xtt8cq}TeU zhB#wDO>!Rq5UnwdVZv7#$b&-|q+iXl$HJEW1il0GwN7f-Rovly+~9O0Oe#J2yuEH^ zV`W&f5%9NF&+`P`-#0SIrlCddVT)pbJ|2F~MR_8z8ZR%hv`tVwB@&p^b>c-MVJrh~ z&H_0S>GQ6FSTYE3-m}g-40*l6GOl z5llz5%_Ad@gpCwF@xJq| zoE`x_(RG=T>V(>!&d{O|Y3t~Xsc*+)55N7qa;sK+vk41YPJSWox6S+B;BLeLwY{zG z{eWKYQmz=o3FuikUb&VUU4si0W4aNoM;ddE+jTyFA6(F3I(KpJRr1a)_;Il+pCzQ8 z@0CWw=!}W$zW;t`zo_(r++@5>gHSsQc%E(RM%QdxNt(hWg;>v&YfrPyJCtvfwu*{#r=bF2bX(KB`)rkZAbXpBX0`6j>v09;$2`YfBkMf z*|ZHkSATQbn^|gVT*#x@a|Hj{ivCdQ7k{VNf!> zB8r=mE-WvI#_uxuj}Be<{eS4H{@-obYrXUaMj?dzhY?0e&}hv@K8Tt*=sf6JPbvE- zcH!+y2`=*>Z$m9A?c>oe5Yko;Qm^?~h54kT{kg11y%jVZinF;_-aU(@@%`-j+ZQ`)G&Fid14?lZ%YzRc< zevUVgYQbkf3#zW#i;jR$e+QzUG$fRhcIVNLlJwW5N^|@difQ>0;FGY`rMj5GP61Ni z|5#LSZGYUzlJYP5lTh&!0&UWK!1*!qbr^pZa(z?#c2EV`%Ls*(?;YgV&eS7 zMI4~QRiUXI(bzrSpaOQ#AY?h(KZ@#t-qB?5N#9>IOtAuD1=F(9%g1kPtklGd*T zFZM_tFMUEdBy2o1ab?Lxq*i$ydJ`FMk+DMSd{j36#V@n-wVtsQ$U;_8!|}`1;!Y)@ zc>hb=_~p7=H0F5R6O#|4{-8`=f&x~Xo=dN%`|R%XGe7xfsRK@*0NrvrY7$^?KdCT@ zo2*Ly8=ryQ|deFbP%uLPZkwL6+U|;h_bWN zu^GJ%tIr|8pHy<%MIc`&L3&UbhnMj8Q2VvR0xtw2I#e=vPBkR2j7y{HQfW?ZzE5aM z^|iS7ZV9<@x8qJl;kC{dRPlG6=t1jfZS9w`_$l6LfEBS!Lro7<2>fF6yD#(D%9gJ( z>n8UNqM{yj#kmdfy#BJyCZ4aV4F;Alkz>Tct=o<_O@6@#fS%!ZA;D~nH{6=wCdXDB5+v(*&CikWH z&m5(ctDDhbNiv}<12OB%<2?u`oV<&R92G>+Pp zmgSUxEZ;XIppnN!?VOWEoc+&&=i5TslB5H_(f9Oy)3TG!Ud>!<2wF>6zbb z?PJ%47v}=peJ>FsLN48S+#@Gs1sjXYndKIX5fKy^8T@33ko+dQ5TK^Qe(#>@#$EVfMyMH^ypwG zM%nH7Q0*i3ny>q>RgDR&bbt6-(dD!Ey+AE{F;*>f<_D!;UQQeMU3_2O zf0Q)Mm`s*0advXb46$cP7?pQO_p<{#!oE4Se{xlGwLgU$TXO8J9CeabKf7{t-Z1u8 zbS=5W>1SuhLhI4_;EZ2pu&7uwX$y3lLF@8Nou;-e2S&7wsT8jTwj7k~ri8nb_JT@Z z8L>OEb0WytHrW4RP-6=L*u1&?`u#%g4%i}bW>RP7<%d^4aQ2qypi5f4H?j$dG~Vc) z5r3rL<(Dh(DRW;5?_ZLzJ(6FhY~{R;FFearjREFwu~tutUtRZ`E-Son8t!fNs@(e` zWvpo0an7PgK4nZeN{|0Us%A;{xX&Vz)oX#&(Klt^c&z$R1%v5=Jn*T25*x_TusfYN zpf796%urMLv|3>%JKfO8aau4G@4nWGEsU3F_McXHJ5X?J_ZiT48iT# zz^Ds3*5NL5!NJzOUn9wjR)5S9a?!1Iu0ErAyL{)93pBLfZnx3X%s+m_`-NpF-}^~{ z5c9*^{UuKaPUedX#Yk)iqS|L=P!SYLGA$~8cPG`K>FO-c$UU(V;AXZiUNg^~{AIMe zj$*b8*)_dvt@0-#=l14Jy3D9;JFiuFADdG~7Y~5%ayz{6X?k+iaPpC6Cnf*1W1gBQ z#OVeLM0Ym2OXAZdpRe=Fz$Ee!(ub=O3Ecl|Z0yJ#VvDIeuOjS?Kl>}%m!2&-6~8*W z-Qbw?a_+Tr?^7cVez%o7xVW*fm@e97*)lP@z#E<93cbJtx2BXzX2)dSosX`bUb1U- zdCT>^E(9lM26C)~=3mG`=w7L3Nhgq$dt2tDD9;)L%Mt*K3giJ$LKoFRL?g2eX_=E0 zjy_SF^U@(AIxYua{&|;S=cdJhP#7AtRB5FMa$20i#91xUj6nyt+Oli~-V0~xMEyC` zv*ma5LmRd4hX1?A)E1%%bSV_HAvK%lGBY~B{d6_1ZTLlHFezyI(6PW+jRI-a!1mzh z-;1RE{kX^4@m@JMR#LE9nUQnfGdy#mm&-Hhx6+#R&mNo7?AN&2Snt=+;BU;q+MK@p zqPn@PzOEM!Hd6&1*aPt=EdPm;GAY1y@I^@sSf=S@{sFYDFj20vt}w@J*BGf3>roUX z#0GgLo+^1k3vpp8yRwFz4mfio;MMs9g2LG(YM-$wn`*r%F2!t(jJM;0(u^+>Ea1*F zaWnJq@H#p~>f5_6-k76{PY0}{#8F)=f)y4KS|=(e~u)1-AjbBD};gP#TNuwX7SU~)RjqPj{c+0f>-NdTC5sh(aN@M@O72n2@MC&(qx7{ZpyyV ztP+`F=f)>l*J3EOy?<>wGGx`CyWhdBV`F|UB5AUR<(O76ceGPeM68KB+YoqHc$Z5A zZqDoKGTumXJlL1<}9a!2=dt-cmzx+mwJ^X*ogDN`b;!7Er*jxOEYzuNWI=1Ef)gg)qM=kYZc?$K zWK_bGdiMOaDPq#}VRYa!rj;m^w%UQ&)~EP?HuHHeJV?8x3~t}v&|cEiwU=rM5N>I2 z_5uatNZPhdDD7SoU<%;uoMK=$*fA43vir z%-Uw-Oww~9bp|23JgG2R5r&Xoba6wL`oOhq^Ku&Sq&8qJC)_4{r1EQh(g(Ro64d#f zmx8g)XR)dY!e~;Z-QI#Wa&}DerzUpkw8ME?vPK{d_Zg$`AJyi!*1r)LN!HBH4g)r zAeOZiM$Pw}{<2}an_SWc;;;?p@%<=`k7Fl*%@|#bxMILFX=yVe;dReWKil6BWa|=? zIyTw+uH15r=fPdC^7 z)#O`n1rwQKAw)xe*d@$A#3+7a)mF0B^>_nSc7-KqU1TvY&ZSTDA4fM8m-~sM)O}3H zqrgmOZv%5&@^rqbs0+r5ZO?^h@sn7Kh}VnI&RC`5$lmq_PqT=yz7&uwQ z!}nE^{!~VI*Am1&bkx=4fJV^QYTV_gGM-6A!II2vT)jW`FF;KlRX{;v9`+M=5!zm zLpBmk&fP;vwPe>m&Hr{r27D=+cUm(pr?rcwv)RDK1-&7R#6(WrXg(WRhV^+8M14kd zQ<+3e7i@$93HxAbGlj@Hj6)0md2RRA?EEyghhOx55JIg`=jK zF;H*5QVc$n>7JTpbK~kasP7^IgIeIdCxdUIC8a!0UIXEn9tQ%EpK3iZzQV6f_c=C;R*Te{#>cN3J8`ykAQ5ca z$ISiC9ue)d8aL<6?Wm=n>s!zp2{>RIP&;|F`}n5*5U-Pl$MLeqt)q&jXDT=>njfoE z<@${h8|#60?_O9hGZoW>(QAo1T2FjbcX>R{H8|*Oxx1~+G6%=f^mJN^IeX$+{)KSW zCC7({-ccf|GQL7xIKgog8QLksl$nxy7%ulTlNR;dbXHD2i?K6OWq%}KFDohei2_pl zmsR_%@sE$czQdsX*d-$j@|vmG1&W@BRB5GRkpGLM+bx=sbkBi`ZJF-fo}B9UtbK+1 zt@s0qBBO=RPYpVqa_ugXCN97GaD`T7=TtH0z9rLUuatYS&JC}pq2~6-i(-X!D{%~u z53tXK~(5^3M~LY3!<0n;`T<4so~;h1b}%y|q{CtxA&4Pk7^92DJ0XQB75e zcWve@&X(?Z_@Ma67tNTc3#T1t<$&hwAy6)~D8|aM*90!p2EWIio;tYazOZ(3Kjm6= zs-0F-T%l9bATOB^=JbKuP~JZw_R_8c9;a81XUL}4Eaq=LFs>8R5)`m*F|Uf4^N(( zJ?~o6#LgdmhpLZ<>!KIl!al#ZsCosQ3s{OsE*}}4Z14*N`6d84-F$gvDgq#m2M}LF zvp;RyI`dDNBiuVs8u- z4ulv-ga)9U>1*NlM>XGvpm_;_3+@D?jXW{ zR6F_f-QZ}5lEkNzX5p694yCb1A-G2KnxXKxmI%(e! z#In$6&g-E#<3vn|3`84-EU-ri3`Fm%=+>_R42>94cQ@p za$?#iRfl$5n{^!1TQ+I{@S99Re!bMjNEr2oCe=Q|tjLUGUeECrdO)>fg`a0MQ;8vxe{5@mhKon!53quc>{?(o5hdh(@=C4hE1f?j!F9W6)7ReV+cndd5>8h|x;fsJ0wXNC7pDSjIP!Z~_59(Fdm z|KD?XGRN@xJ^XQIpi&$Ut}wQCvZMbXL|^=yj2mQF0QbwW8ZG;0a}?-noC}0rHnj|| zzN((D9>xNqx8C0HehIKl2dR`5Vq*Rl)5H@@= zGTM${hJWfZS01H>o`4#g-bzrRPP+5XfjFQXRfDdfHc5WXx(qxW8?!JEVO0HkMMZfa zm?M~(6qI1By~u1uxV0XCjVoIwJST=?UNrl5x=}1pXBq_`nM) zrDeAuG16rw<55tPdP)BR0g z9WvjXTOA!}Snwx$c@eAmqtNKB59+5<{J43lWSIc!1C!>9N)mOYvj+bLfc)#cVU`{OKk)fe{nva?ADY0*QOk%XNt64a9A4C zp?dlF9r{m?CzanmK1y0hJOR(h#2zFgyt&3<`#a~P#Xt$4r_m=`)E{1UDwx386mq0S zvjJx86de|PwWZN=StXG=Dn}y~e3nn?R*M2Etj}{#ULlpJ6_c5=07uj_Clt$N%qcfbne*Ha;{&xNf*?B8D=87>^oP=4DWS?n=sIFlM zn0n#9caPMv{?6B-3$f>CN;qzJPy5a<-(dO20V%SJjlUiGxWvyKUEkGk3+p6_Fy^=@ zJ}EZ5sn=3aQ6H@1$dUImONIC8ZdNWY=_oxH>R~}sWl&U&Ho|&+cIXSLPe#%z*K9Lpf1UKL7Pjf2|87ke5zme_Leb&+*r`u1GLwVWKt9c95@}`KHI^#r~3Bpt-Eh)SbldDVqE(v zZAt5_p>Y^KT=QgL-J&(psox0EC-K{OGP8O(dpebpveUaF({n(eO5gnzu2?uaqcs<% zDqn1Ac{0gJZ>hFaT{#3>xu|j^Wm>8;`0J;z99^>^z0Z%zlaumj=imE^!em}(*N9~f z!~_If&%H}?Q)`Z1m1?G|U2$(fv$Jcktq`H2RPf?u+31(m^d=rP?XXZfqv5oExnkB} z%yHx^bExNCAbH0B)LrV7^QBMMt|%^2w&6*aQVP)n4REDhZI13uAl_SW0Mn0)wB&RF zRvXhl-1gARETo7!c5)XDJ$^eo;_4>>VojP`KB@Ib-9Z$3eXMR`2N$XB0tI7bD55&N zyP}eJcVNr*aB2zciLc1m^I*?fHlhH+2_>ZknaKwyv1>~N7iNidX{dI_m!rM1mdksz zof>T2!BA~?m#A*3{ms9iOaFm9Wx9N_9!HBL!1!2o@JZ}BwVJ2D-2RyqFTF}y>+yva z9?pt_1q*X?<&PdtR#HnEX}$e--BIp2VJEL9jgLnx$HivWHsfM8QeJxcxus|QOM!whR%WM|Y;UC7h5o@3ODjaHetV&7l zLVUO6{{4S`ukS|lbLLiZoj_W#T$iZm&Nk1lU{5xQR%r+`$*V#qfl=yp@gt3u)Sw}| z)zLIDvCx6Qjv&`e|DR%%`ac(=Ws8m_qxlqxF3Go4QjfinqoR$xNFX#d2u~44N6VAmQ!_Ho)H>fC ziXs}gIGp$K*>$?Vqg_C#RZaPH^ClrknmADabF~7$4lgoT)p`#~e|TYQwUlX%zu33Y zQais+SdE>V!PAJ-kMD(ug6Ap7OQ+AJQf3*OTfm(t((%(W>?fQ@BHyTS0sl0(m%itP7*M+gsO`Rp&`9!%S%HQVe&(Gq$85!M%kBXSbmHVe?=8 zE@TF2o}gdp&~4V{*V3Yv%nRXulw2UauO+M9t(`2rO?68n;PBEdOq*ahV7RGXiAiY!GS|4!pqj+6Ko=V6#Q*eE%oB;j=QB zc$6H|g^%3MZiovDJbM+IGK(5)+19+7`Q8)#gTQ3h(6lbVW~LI%5j`W<)?yIk%q_Vl zU>xgMtjyGFh#HA%TMJu$;|GJe5vEjbI{UIJhb2&ULH&qSo`mph=SK)>bVsNk$h%N- zj(^LA&F{F>fQzSs0Z>qlBfHN92kffOGeB^rOTSplLBfa;B=yq+2FK`)Ng=poOCJF> z9%Enq$ArM4Y*0XM=IV&KGVoQ2o zPQq9%_ddF%ocO*;2Tn!83A?QQkxPwp^m8{0m6q{75v=I;q9VtsKasthn6#mW#W-X_e159F+x& z6{v(8bzsj@b5*r{%*J!*+A(wt-O7{C4VH*Nw4=j6Ms)S!0xmTS6Wq7QmNv==VoQ51 z>cP7ZlMH1nKIRrXT}jE{jzhYbru7#Vew8`ymdLJOH&_^fE{NFGeZ9mY{oyG8Z<=1! zuEbb{X~YvGqJ@o1Ha5tMEF?$&0nz}52nncKSD>BO-6!bpFCQhMZZ=hmWw|Mmzc%Hj z4Z0kEn>8HVUlT+XZ17Xvt{2Ko*cVoF#pXeFuN>P(T$3%tnSV65sNnYce~P{_HOuY+ zN-{UsqUtsC*%XNay(4#*680Ct=BV&lv}|F{agwb5axX@3NiP!MC+2MEi3Z{(=OSKu zo_o)$BK(l}vhWf1=Z?vJVz;VX>k3*R?@n*5^NmKQMgHVAE+!r}=|xz3e{m3hG~-2^ zMtNy9pIXVynpBQk7#2+iqs|R|_VifHI75vNsx0W|c{rGj9$(d)@Um`-hmqP`S>%+o zWNi81;2cnr|A6_uZ_V;q`kA!i<%q#}=+?{hmnBXa9d0OplwM{E*Ua_R_27+(+qJ|o zzfv?m{OIIbF+vFah+5@AR)zN$NO>GLceLW;;McX=N@K{mU(QJ4y4TF`~!?hb;`}9OEImMb&pbm z^TBDE7%D`4)7AerOq_(x*E5EbE~f{!Mu5Ls7N?Q_;R|ZKVgi=hE)J6}&x7&xniQ8Z zT~Rrtds-MZ(mH#Xn`Zm@JTqaT)P4-x4>pt*m(utuLG=1!K=)F_Ng43~4oxNs`TF^1 z9Zv>!$vP|zQ#>ukh#n<|<&NHCXvK}H`DIJx28f9uk;^O34ueK&@ReCMY^Vw81UmS% zk<>_2@1SbkKhd>*E-gBU-4Z`v@28SI?AaC1pGLJ;-z{Ux0y;ydbAJ3iv{vk5HFHNc z^J}J{Zy~uZ=BJRn$9QINI{%b_(vg3pIXg45d%9%UYJ4m$U=sZ?HPtTVTa)&*tr90Q z|4HFP*IPf>dr}c@wYzE-$$ZXy@()+aOrmUYvMY}2DlVZ8A&ED>V)bG@0lxYM9w8kh z_^@4C`_C*-W3$SwdD^GX3ot%0Gx%q2Bl0N%zS>X3s`}BbfBw|M+U}?F^Y=u_r89vt zLNmWEW7lj)UgS<)p8MTIKeJkNQuqN!7HhQ4935iQ)4g6aUUvlg?Pe~(ipXK!?$1su zwx3K$b8)LUpx@*7DKYNdu(E1TS=5b^p$rrAV;z(%-t$K;Ki)-uhno5WUBl>%5j1&m z$Zjc9oe5>Vig0P@OmP7xz9Z?1_w z-}9}TXiU{8S9xYv`YeHGSFzX=&)RG9UKI)<`9J~JBQfQ za#&enF=MFy{XJyr_2X!EQl!t0y9;K+$90t@jKJv~FyrMNTe&+Dm(e1iwQwZh^f-}V zJ<2mR3CnF~oiIMXybWjxz;!pd&oB-K6D+KZx~#T82tQDm_9;K3>-oj&v%SZ=wmxi| z(QLVGa(30CExS<1_GX@%!)kxu=Ub^U(4ZZNC}M3Og&lF%g+(+F&+tE#t^cJ6y=EAXO_x2T1iOV^o{nFQJK;;1F zRs=82rdC`I0wn-H{#s7*(^(%0jE24ve2&*DMKDJ3txiBji((qxl|bU(1(I#=@r(u% zR94HuZaecQ*pzQC=)Fzv@MKx*@M@(c1K>~2YrM8y8IN8T4ySPGOh3B7>H_iFKJvix z-vD4yT$qKZkh>Iye4~~yv2&+FRRl@U5K9G~FHNzN<;!0IbbA=nijAdzGC$aa^=Jyd zkP}<4EcfksjBUVT?luu#pW-et}cnqnZLKjB|03t5dtj>eDvpMPFsc~ zO>vhw$kOItYS+YNufI*NH9WWICzOwM(><6DRujHLP`LfEc3|+a8!@Ru;j*A{HqfV& zqNAR0{zH~{TiZS#iG?+A;e0yF$ z;0Og$2;^g&Crg-(Eku(8zp~*6(;wxj=ZDJlVs5s3I^%pWH-iTyu~&C`Ox%P97rx%P z7`m?Q!COEmK8yR#cKi21v+H^1gI0uhBrGMQBD&mDhvH z3`Kp;San{n_xszA2Rx`pxBfTQsP#7`|Heq2&e@^T^3d_EA-W}f99HrWky_f)oOhPV zu@qyMh5N>DvxQygpr*-~(zw(t`NZH@BIAPf%AHyW??~cus4@ zThM=-8;4qhKt;*y?Ty$UDNI&MxAFUhpGL2?aA+KoTy4}N)HpQf^@@x<7ia#Jg8#da zxezfTUwhB#Z>>T}aS#ruh}X;B69B+ z{m!@Bc%;YbzzlP&QIJQuub@9%`QQBz2m43b|<)?$@_{2Xg0 zNaU8sER1i(STw2UXrpbrgrs(`LJoOb*r8XTrmP7@D#fy?*GC(_)_{xDha4eK{GcvzUH1}+U|^Czm}L-KtovdNY4Q#!A<}R~ zlWzE8R2EZaSVCP-*(dON(!JF1dAnNzp{9W8I}OYolTu2xy`5w5^&vP~_MTar^PP@| z&DEM8gNR;;Nx($SEF3&K7wK;~^5Fx`hCeoJZ_klcnc1#WBYtx0*%eRU*w;7O*|3<6 zk_L5<64qj!G%jSm%!tECzm;bciy!a6j|J~KG0dYhzcpy2eZhxv6X5OL9NjkDF8B~= z!k)#N<_r9318r+9qe+(oW&@IrclM9gWosppK!CK%l)K$=)=mOhp11dk=~r4=q70MV zsF4c0v}c8DQL4~#mddptx%vLaV5m9sR-~fxzI$YqPhb3DQqY?5{T@$4O#T`mGl zP27_zyy;rh>T7i`9!!n~966S=*m6rTA-I)8r%@%b^65)bmC2MZ%KeN7lsE~>Ec0VzjDGi$5*sVi2K(aD&Gv2Cu zxvojqU7t4-Xk>8|^#rp3K25#ADb1#+ZwYZgqL8qzO}ma*(Cf`$T`AAD2R$bEs#M<$ zvCsc0wU1e;+BCZF8{>uQ``d@Ft#mwmtZ`R?$@Q_WjowfCteOgXDvZm$wlH!$n(xi^ z`)q@DictEZ?dwMd_go1tecpXz)5;*{Wk&QzfN?6A?(%u|n!kFE=Fy|g3V*e_f! z${NtB+r~xqb)=g9Eqkv&9XqpM5pgY$BUM}V2=9dGs57YD>v=8Ob8x!Tsj_bcqR8>X zwFZdz860SQ8=irl)3;Ii(vxXbE;%whiFhu_{qTpDw!a4rTk%@P>XPJHET$clq?M>{ zntYblEYN-*s*pK|X_Q~uzEr|)$JDowu(AH{AG_vR)Zk~ac|awof_XPh(E8XBdOA&h z<%#4v3joKPu76|b_%GnSUk~49JK8%tSV( zKX};L-RDJ*ihs~a@RJZVqmr?iflZ^Q7o)xg%O0H>Ay&tUM*q>3UUH_KUQN$v68HDZ zTHj)T73kE4;KK35Fh$H0dZo&*h^3I$UVx=|ra*2RQ!Iq*1${=oZ{*3t4hzBnU$Ue+ zYwrE<{!f9&o=j??#7h{~l42MO`k0lMUOeFK?BF9G^RUZ2j}?Ybl*i@4Olmylyim|!Xf%YJ+7)}dj;Ehc zSt&xDXnyG3Rooq@`Z;KSCSNK#o|vk#ZhM2byDGci8ZmnE_aH$WV1X1hu?A> z%X_D_s^;ijZq=4kA5App5mRP;d&=40o;Phx&$+~R%EGqbY7-`OuSW)ce}aqNaNy*5 zzLBMG3oJk8W}35B@)r6YQ&f!os!dyrFg>{Z_TAxzAD9~t*;+!U zg6WVjl^31w^m&g(yw6&L6-&+lCHYn%WqV`3@vUm*t26>s)_%Rn4SKaN(8Z;r$OKtC zThoV(*Q4zHcaBsUoiFiPKE-zG`W`8- zmb6L;QYAMyFN-y=%S8Q9W0CjersCHLdmi*nRvo6gCgYZw#N)m}8-90wzrL0SFIL+t z+HiGV>eerKrx|6PJx8lgKBAp*3z0IUA*P!6hSTe=HPuY9CK^tTb%LN7->spZ;+)94 zpFDiFb)AXXm*ti1F8>dEn16IP{&$z=_wDZQN9q9g)(@_M2cUI>_PF~Fn-zv)PkhZF zT$QDc}ct<0h)lT0KL(pu5t4+YWI0K9!C`laR zZ=E!QdMiuEIa}ao|(d8&?HED#zVeZrED{ zQlg7He&HX+T<6(s-YJfUsC9Qk-*nsWD4@$BSqIQ#=*SLL2wj*3 znaR?<^L+i8;h#fLXFA$6i!=#6A3qm!)sXiE33Le)h}{sfZ290$(W2|au~cv^9;R3y9hL0$C?=Ew5b2btN_hw=&$ zW}JRm5D_#1^?v%)+dKQ>qS+bv5IHNwD~pj~ZGpc-i?k@2#xJGVP zxJP(ewx}>~;xw|n(CaVQwk4b#25;i|&p*FFop6v*_L}eor7Czvu&L`q)cwB(xc;Va z{d3Od{ToogAM3-*0+?_KE(sxg{kU%S&7mzGyCV%_fXdZOap399H8o&obheqHliq5= zxls!B#F4f3dnt8F-T>soxjQVKO%GcnL5S8=5+_`;`)VeUff*{m_aWbx{vx~o@{Uyd zH_`q3JQjDm{eL*w`7vEamNW*^;$|g9Fsc{@@!7$wY&8Ze52R)o;lPIY=}`?7e!8P) zN)|*fyXterN8@!^#qo!zQ1c?Xrw5uY<>rA>A0D<^JLblNRF2!d3gA3HMex5c^m4|_ zEDCEJf8*KJF3~4mZEK`x>rwi|PyX4<7H|{%FsjfFBI`t~ba#qF6V}QLVRX~-gA=A> z^3joklp5&*B`ps`J>|rwmRx7@8NZPB4KBWIN)QCbu2wAd`Yk)`@A2@jKhN>5y#r{^ z;>wOF+_DvpU&G`kkV~F8C~gv?l(F5JK?O9Wppw5 zDWnIT;jCXVfi)O@7-|0Oe?nG#8UU)cl2Dq$!TZ0LmP%l2#wOg#}^^FWX zC8hIP`rltg1DAWW=pv|7+0XI|P54^Wh~H8%x72h`-Ht@h+@z*VeXuLn9vI4I zzB$dH;+MNk3)n{(1oQDJhIz!bt9fa?Y@ayLThDnvBcgjP2u-x;XyrL085r`gEbVBR zf}_+_FN~@`T9(Z*f4$LJK$_>nR=I~;B~9c^Zp zj>D~ZPLCi!_kEz8@RVDaM0=dMkL>Xbu2H7*if!3zHO2xfrGZg4e&Uw~S#0rlYOiX?aI@w=1n` zsl}(MI%(mf=K2Hv7{h4la6G2?pry3Of?VzgjonFlbi^bvH)sPlpW8_%xByqcZ1Tx& z4wOCUO@hKDluNdY5F=q|V;Qt4IKuxBS)Pf*h-|uG;bu<|!)gUJ+?tTm%siQ=q%)nG z`3O@yEhWOVTT_2c?=7g^W_?pB+1?xYxWV?ptgm2@#Dt0{p`5sO+!dGqOVHK7bwxn^ z>ay^G`636yZW5g>^k7sIhsLwZ0;|+rujJzg57K;0MbGxXJmB*Tfv z%atT_Wu2usjTcl=1FO!#7}&|jjc%Laz_9{WvF~qCP2&SFrR5F29~#u%$#F?5g{2Bi zGhh4Q|42@M2Xy}n>=|`s%-9s+=XGi3hICKdxI^L4@4z{;AJuA1k@-TXe#dy%7H7F# zjn5dhM4nQsWsOMaqD9n~-8&<)FV6H>qv!@6?x^*XXXy$kZhF*=tTE(KmIkN?-~vfC zUBR!6#(bvv3$j}T)opZDq3gY4`ZBQlJ#qW)x3)_!2Y}{u)(X2kTK}}b76c(==jE#{ zv|(>-hhQ8vJ~KyrWbax^;Lb^~gJh^7H^q}=APh^k_QRwNLo0Zev*GWw{=(QdA_EN* zkqCnj`c>)@xmu^mc za~yH&RM^aQN5HQsG0IIdz&xK!;-Ir!(bp`!Iac7YQyHilkjb5&YB{+B=CHz3d8n3J zqF1+5_b#x1wPYoSt}#4^o}>2mhmlCn?o-Pn+7RL(I_G@bXPuhG+-U$;!>q0c=;b5) zDjQb?#%Geadbn+g+@toqnp$UT*e+Rj9y6ww%kFyx@kWMLM*%<=_Kikgx85`|uYjP0 zZv5g(8L7hX5rH~1((P657+vbF{wmqQHj6u;+2kE>h*QL|ArsIfuw3Kh+}hJwg3Ny` zGc##S04f|%W364nr5yh@p?14fNaU6q)bt`+l>E}>-*KkS45r+@89oj(~% zoVPrLH{O($E>cy7?_G?1Mx?O%ub{UAjh~L(1pI{I30dY1ngy^qb5MZB{IJ*L_G-Kg zJ(}f}kPWI@Rw!oZK$|mPec|{i*7E-79 zrdzqJ){B*shYKL8?~j$uJFY@{L!d^`W>tkLm&iw}2cj92ksEZ0imwPJFW@!yY_J2L z2x}^5cyFSt-BEo^Ea*f;qFAG9NL7p(UMX6Ps1Ab`;Opb+tZ_N;;`v;OK(u#S(FYQA zY5Vj$x??BJG%zKE_Ol~E3v(Bw;25lCnvVLe{1Dla{{o`|Ci`4j0P+%ZVK4C@mIX}J zK>zQF^Df7;jY=P>qgd6lpM)YSV!IcstGzTZR}Y&6x%Qg9ZXCr&BLGk5<-gNX?5t_^ zxY-rLxj2q=V_vcuSP{6c6MCQK&<1EKl|4I*lY9tbi$+}cMj=5U>f6+Pd-HooQ?rmYDS%dR^6Rt z`!TV1Q!iG?nD3{PDH`^y_Qktj}Xg=gRN z(84H_t~cC8oh&2`VGb1rx!fZ-H0LHuH?`XAlfWY#2veBv(7$$Ukb=yw+F8y2%47e( O6;J$!K5X&3zW)M^C&;@1 literal 0 HcmV?d00001 diff --git a/docs/translations/kr/cosmos-sdk-image.png b/docs/translations/kr/cosmos-sdk-image.png new file mode 100755 index 0000000000000000000000000000000000000000..ab9a4abc68c829a7bbdbfdfbc652670f633b3fe6 GIT binary patch literal 190395 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 dTO)$`Device`>`Reset All`를 통해 리셋을 진행한 후 펀드레이저 시드를 입력할 수 있습니다. **렛저 기기를 리셋할 경우, 기존에 사용했던 시드키는 기기에서 삭제됩니다. 리셋을 진행하기 전 기존 기기의 시드키를 백업하셨는지 확인하신 후 진행하시기 바랍니다.** 백업 되지 않은 상태로 기기를 리셋하는 경우, 관련 계정의 자산을 잃을 수 있습니다.* +::: + + +다음 단계는 신규 렛저 기기 또는 초기화 된 렛저 기기에서 진행되어야 합니다: + +1. USB를 사용해 렛저 기기를 컴퓨터에 연결하세요 +2. 두개의 버튼을 동시에 누르세요 +3. "Restore Configuration"을 선택하세요. **"Config as a new device"를 선택하시면 안됩니다** +4. 원하시는 핀 번호를 입력하세요 +5. 12-words 옵션을 선택하세요 +6. 코스모스 펀드레이저에서 부여 받은 시드키를 차례대로 정확하게 입력하세요 + +이제 렛저 하드웨어 지갑 기기가 펀드레이저 시드로 활성화되었습니다. 기존의 펀드레이저 시드를 파기하지 마십시오! 만약 렛저 기기가 고장나거나 분실된 경우, 동일한 시드키를 이용해 복구가 가능합니다. + +이제 [여기](#using-a-ledger-device)를 클릭하여 계정을 생성하는 방법을 확인하세요. + +#### 컴퓨터 사용하기 + +::: warning +**참고: 다음 행동은 오프라인 상태인 컴퓨터에서 진행하는 것이 더욱 안전합니다.** +::: + +컴퓨터를 이용해 펀드레이저 시드키를 복구하시고 컴퓨터에 프라이빗 키를 저장사기 위해서는 다음 명령어를 실행하세요: + +```bash +gaiacli keys add <키 명칭 지정(YourKeyName)> --recover +``` + +명령어를 입력하셨다면 프로그램이 지금 생성(복구)하시는 계정의 프라이빗 키를 암호화할때 사용될 비밀번호를 입력할 것을 요청합니다. 해당 계정을 이용해 트랜잭션을 보낼때마다 이 비밀번호를 입력하셔야 합니다. 만약 비밀번호를 잃어버리셨다면 시드키를 사용해 계정을 다시 복구할 수 있습니다. + +- `` 은 계정의 이름입니다. 이는 시드키로부터 키 페어를 파생할때 레퍼런스로 사용됩니다. 이 이름은 토큰을 전송할때 보내는 계정을 구분하기 위해서 사용됩니다. +- 추가적인 선택 사항으로 명령어에 `--account` 플래그를 추가해 특정 패스(`0`, `1`, `2`, 등)를 지정할 수 있습니다. 기본적으로 `0`을 사용하여 계정이 생성됩니다. + +### 계정 생성하기 + +새로운 계정을 생성하기 위해서는 `gaiacli`를 설치해야합니다. 신규 계정을 생성하기 전, 프라이빗 키를 어디에 저장하고 어떻게 불러올지 미리 인지를 하셔야 합니다. 프라이빗 키를 보관하기 가장 좋은 곳은 오프라인 컴퓨터 또는 렛저 하드웨어 월렛 기기입니다. 흔히 사용되는 온라인 컴퓨터에 프라이빗 키를 보관하게 될 경우, 인터넷을 통해 컴퓨터를 침투한 공격자가 프라이빗 키를 탈취할 수 있기 때문에 상당한 리스크가 존재합니다. + +#### 렛저(Ledger) 하드웨어 월렛 기기 사용하기 + +::: warning +**새로 주문한 렛저 기기 또는 신뢰할 수 있는 렛저 기기만을 사용하세요** +::: + +렛저 기기를 처음 활성화할때 24개 단어로 구성된 시드키가 생성되고 기기에 저장됩니다. 렛저 기기의 시드키는 코스모스와 코스모스 계정과 호환이 되며, 해당 시드키를 기반으로 계정을 생성할 수 있습니다. 렛저 기기는 `gaiacli`와 호환될 수 있게 설정이 되어야 합니다. 렛저 기기를 설정하는 방법은 다음과 같습니다: + +1. [Ledger Live 앱](https://www.ledger.com/pages/ledger-live) 다운로드 +2. 렛저 기기를 USB로 연결한 후 최신 펌웨어 버전으로 업데이트 +3. Ledger Live 앱스토어로 이동한 후, "Cosmos" 애플리케이션 다운로드. (이 단계는 다소 시간이 걸릴 수 있습니다) +4. 렛저 기기에서 코스모스 앱 선택 + +계정을 생성하기 위해서는 다음 명령어를 실행하십시오: + +```bash +gaiacli keys add <키 명칭 지정(yourKeyName)> --ledger +``` + +- `` 은 계정의 이름입니다. 이는 시드키로부터 키 페어를 파생할때 레퍼런스로 사용됩니다. 이 이름은 토큰을 전송할때 보내는 계정을 구분하기 위해서 사용됩니다. +- 추가적인 선택 사항으로 명령어에 `--account` 플래그를 추가해 특정 패스(`0`, `1`, `2`, 등)를 지정할 수 있습니다. 기본적으로 `0`을 사용하여 계정이 생성됩니다. + +#### 컴퓨터 사용하기 + +::: warning +**참고: 다음 행동은 오프라인 상태인 컴퓨터에서 진행하는 것이 더욱 안전합니다.** +::: + +계정을 생성하기 위해서는 다음 명령어를 입력하세요: + +```bash +gaiacli keys add <키 명칭 지정(yourKeyName)> +``` + +위 명령어는 새로운 24단어로 구성된 시드키를 생성하고, 계정 `0`의 프라이빗 키와 퍼블릭 키를 저장합니다. 이후, 디스크에 저장될 계정 `0`의 프라이빗 키를 암호화할때 사용될 비밀번호를 입력할 것을 요청합니다. 해당 계정을 이용해 트랜잭션을 보낼때마다 이 비밀번호를 입력하셔야 합니다. 만약 비밀번호를 잃어버리셨다면 시드키를 사용해 계정을 다시 복구할 수 있습니다. + +::: danger +**경고: 12 단어 시드키를 분실하거나 그 누구와도 공유하지 마세요. 자금 탈취와 손실을 예방하기 위해서는 다수의 시드키 사본을 만드시고 금고 같이 본인만이 알 수 있는 안전한 곳에 보관하는 것을 추천합니다. 누군가 시드키를 가지게 된 경우, 관련 프라이빗 키와 모든 계정의 소유권을 가지게 됩니다.** +::: + +::: warning +시드키를 안전하게 보관하셨다면 (두번 세번씩이라도 정확하게 작성되었는지 확인하셔야 합니다!) 커맨드 라인의 기록을 다음과 같이 삭제하시면 됩니다: + +```bash +history -c +rm ~/.bash_history +``` +::: + +- `` 은 계정의 이름입니다. 이는 시드키로부터 키 페어를 파생할때 레퍼런스로 사용됩니다. 이 이름은 토큰을 전송할때 보내는 계정을 구분하기 위해서 사용됩니다. +- 추가적인 선택 사항으로 명령어에 `--account` 플래그를 추가해 특정 패스(`0`, `1`, `2`, 등)를 지정할 수 있습니다. 기본적으로 `0`을 사용하여 계정이 생성됩니다. + + +동일한 시드키로 추가적인 계정을 생성하기 원한다면, 다음 명령어를 사용하세요: + +```bash +gaiacli keys add <키 명칭 지정(yourKeyName)> --recover --account 1 +``` + +해당 명령어는 비밀번호와 시드키를 입력할 것을 요청할 것입니다. 이 외에 추가적인 계정을 생성하시기 원한다면 account 플래그의 번호를 바꾸십시오. + + +## 코스모스 허브 네트워크 사용하기 + +블록체인의 상태(state)를 확인하거나 트랜잭션을 전송하기 위해서는 직접 풀노드를 운영하거나 다른 사람이 운영하는 풀노드에 연결할 수 있습니다. + +::: danger +**경고: 12개 단어 / 24개 단어 시드키를 그 누구와도 공유하지 마세요. 시드키는 본인만이 알고있어야 합니다. 특히 이메일, 메시지 등의 수단으로 블록체인 서비스 지원을 사칭해 시드키를 요청할 수 있으니 주의를 바랍니다. 코스모스 팀, 텐더민트 팀 그리고 인터체인 재단은 절대로 이메일을 통해 개인 정보 또는 시드키를 요청하지 않습니다.**. +::: + +### 직접 풀노드 운영하기 + +이 방법이 가장 안전한 방법이지만, 대량의 리소스를 필요로 합니다. 풀노드를 직접 운영하기 위해서는 우수한 인터넷 대역폭과 최소 1TB 상당의 하드디스크 용량을 필요로 합니다. + +[풀노드를 운영하는 절차](https://cosmos.network/docs/gaia/join-testnet.html)와 [`gaiad`를 설치하는 방법](https://cosmos.network/docs/gaia/installation.html)은 첨부된 링크를 확인하세요. + +### 외부 풀노드에 연결하기 + +만약 본인이 직접 풀노드를 운영하는 것을 원하지 않는다면 다른 사람의 풀노드에 연결을 할 수 있습니다. 이 과정에서는 신뢰할 수 있는 풀노드 운영자에만 연결하세요. 악의적인 풀노드 운영자는 트랜잭션을 막거나 틀린 정보를 전달할 가능성이 있습니다. 하지만 프라이빗 키는 당신의 컴퓨터/렛저 기기에 저장되어 있기 때문에 풀노드 운영자는 절대로 자금을 탈취할 수 없습니다. 검증된 검증인, 월렛 제공자, 거래소 등의 풀노드에만 연결하는 것을 추천드립니다. + +풀노드에 연결하기 위해서는 다음과 같은 형식의 주소가 필요합니다: `https://77.87.106.33:26657` (*이는 예시를 위한 주소이며 실제 풀노드 주소가 아닙니다*). 이 계정은 신뢰할 수 있는 풀노드 운영자에게서 직접 받으시기 바랍니다. 이 주소는 [다음 항목](#setting-up-gaiacli)에서 사용됩니다. + +## `gaiacli` 설정하기 + +::: warning +**`gaiacli`의 최신 스테이블 버전을 사용하고 있는지 확인해주세요** +::: + +`gaiacli`는 코스모스 허브 네트워크에서 운영되고 있는 노드와 소통할 수 있게 하는 도구입니다. 풀노드는 본인이 직접 운영하거나, 타인이 운영하는 풀노드를 사용할 수 있습니다. 이제 `gaiacli`의 설정을 진행하겠습니다. + +`gaiacli`을 설정하기 위해서는 다음 명령어를 실행하세요: + +```bash +gaiacli config <플래그(flag)> <값(value)> +``` + +해당 명령어는 각 플래그에 대한 값을 설정할 수 있게 합니다. 우선 연결하고 싶은 풀노드의 주소를 입력하겠습니다: + + +```bash +gaiacli config node <호스트(host)>:<포트(port)> + +// 예시: gaiacli config node https://77.87.106.33:26657 +``` + +만약 풀노드를 직접 운영하시는 경우, `tcp://localhost:26657`을 주소 값으로 입력하세요. + +이제 `--trust-node` 플래그의 값을 설정하겠습니다: + +```bash +gaiacli config trust-node false + +// 만약 라이트 클라이언트 노드를 운영하고 싶으신 경우 `true` 값을 입력하세요. 그렇지 않은 경우 `false`를 입력하세요 +``` + +마지막으로 소통하고 싶은 블록체인의 `chain-id`를 입력하겠습니다: + +```bash +gaiacli config chain-id gos-3 +``` + +## 블록체인 상태 조회하기 + +[`gaiacli`](https://cosmos.network/docs/gaia/gaiacli.html)는 계정 잔고, 스테이킹 중인 토큰 수량, 지급 가능한 보상, 거버넌스 프로포절 등 블록체인과 관련된 모든 정보를 확인할 수 있게 합니다. 다음은 위임자에게 유용한 명령어들입니다. 다음 명령어를 실행하기 전 [gaiacli 설정](#setting-up-gaiacli)을 진행하세요. + +```bash +// 계정 잔고와 계정 관련 정보 조회 +gaiacli query account + +// 검증인 목록 조회 +gaiacli query validators + +// 검증인 주소로 (예시: cosmos10snjt8dmpr5my0h76xj48ty80uzwhraqalu4eg) 검증인 정보 조회 +gaiacli query validator <검증인 주소(validatorAddress)> + +// 위임자 주소로 (예시: cosmos10snjt8dmpr5my0h76xj48ty80uzwhraqalu4eg) 계정의 모든 위임 기록 조회 +gaiacli query delegations <위임자 주소(delegatorAddress)> + +// 위임자가 특정 검증인에게 위임한 기록 조회 +gaiacli query delegations <위임자 주소(delegatorAddress)> <검증인 주소(validatorAddress)> + +// 위임자 주소로 (예시: cosmos10snjt8dmpr5my0h76xj48ty80uzwhraqalu4eg) 위임자 리워드 조회 +gaiacli query distr rewards <위임자 주소(delegatorAddress)> + +// 예치금(deposit)을 대기중인 모든 프로포절 조회 +gaiacli query proposals --status deposit_period + +// 투표가 가능한 모든 프로포절 조회 +gaiacli query proposals --status voting_period + +// 특정 프로포절 ID로 프로포절 정보 조회 +gaiacli query proposal +``` + +더 많은 명령어를 확인하기 위해서는 다음 명령어를 실행하세요: + +```bash +gaiacli query +``` + +각 명령어에는 `-h` 또는 `--help`를 추가하여 관련 정보를 확인하실 수 있습니다. + +## 아톰 위임하기 / 리워드 수령하기 + +::: warning +**아톰을 위임하기 전에 [위임자 faq](https://cosmos.network/resources/delegators)를 먼저 확인하시고 위임에 따르는 책임과 위험을 사전에 인지하시기 바랍니다** +::: + +::: warning +**참고: 다음 명령어는 온라인 상태인 컴퓨터에서 실행되어야 합니다. 해당 명령은 렛저 하드웨어 월렛 기기를 사용해 실행하는 것을 추천드립니다. 오프라인으로 트랜잭션을 발생하는 방법을 확인하기 위해서는 [여기](#signing-transactions-from-an-offline-computer)를 참고하세요.** +::: + +```bash +// 아톰 위임하기 +// 각 플래그 값 예시: <위임할 수량(amountToBound)> = 10000stake, <검증인의 bech32 주소(bech32AddressOfValidator)> = cosmosvaloper18thamkhnj9wz8pa4nhnp9rldprgant57pk2m8s, <가스 가격(gasPrice)> = 0.001stake + +gaiacli tx staking --amount <위임할 수량(amountToBond)> --validator <검증인의 bech32 주소(bech32AddressOfValidator)> --from <위임자 키 명칭(delegatorKeyName)> --gas auto --gas-prices <가스 가격(gasPrice)> + +// 리워드 수령하기 + +gaiacli tx distr withdraw-rewards --from <위임자 키 명칭(delegatorKeyName)> +``` + +::: tip +렛저 기기를 사용해 트랜잭션을 발생하시는 경우, 기기에서 트랜잭션을 확인하는 과정이 추가적으로 발생됩니다. 기기에서 트랜잭션을 서명하셔야 네트워크로 전파됩니다 +::: + +해당 트랜잭션이 성공적으로 진행된 것을 확인하기 위해서는 다음 조회 명령어를 사용하세요: + +```bash +// 아톰을 위임하거나 리워드를 수령하신 후 계정 잔고가 달라집니다 (계정 잔고 확인 명령어) +gaiacli query account + +// 위임을 진행하셨다면 스테이킹 잔고가 표시됩니다 (스테이킹 확인 명령어) +gaiacli query delegations <위임자 주소(delegatorAddress)> + +// 트랜잭션이 블록체인에 포함되었으면 해당 tx 정보를 전달합니다 +// 트랜잭션을 생성하셨을때 표시되었던 tx hash를 입력하세요 (트랜잭션 확인 명령어) +gaiacli query tx + +``` + +만약 외부 풀노드를 통해서 블록체인을 사용하신 경우 블록 익스플로러를 통해 트랜잭션을 확인하십시오. + +### 가스와 수수료에 대해서 + +코스모스 허브 네트워크는 트랜잭션 처리를 위해 트랜잭션 수수료를 부과합니다. 해당 수수료는 트랜잭션을 실행하기 위한 가스로 사용됩니다. 공식은 다음과 같습니다: + + +``` +수수료(Fee) = 가스(Gas) * 가스 값(GasPrices) +``` + +위 공식에서 `gas`는 전송하는 트랜잭션에 따라 다릅니다. 다른 형태의 트랜잭션은 각자 다른 `gas`량을 필요로 합니다. `gas` 수량은 트랜잭션이 실행될때 계산됨으로 사전에 정확한 값을 확인할 수 있는 방법은 없습니다. 다만, `gas` 플래그의 값을 `auto`로 설정함으로 예상 값을 추출할 수는 있습니다. 예상 값을 수정하기 위해서는 `--gas-adjustment` (기본 값 `1.0`) 플래그 값을 변경하셔서 트랜잭션이 충분한 가스를 확보할 수 있도록 하십시오. + +`gasPrice`는 각 `gas` 유닛의 가격입니다. 각 검증인은 직접 최소 가스 가격인 `min-gas-price`를 설정하며, 트랜잭션의 `gasPrice`가 설정한 `min-gas-price`보다 높을때 트랜잭션을 처리합니다. + +트랜잭션 피(`fees`)는 `gas` 수량과 `gasPrice`를 곱한 값입니다. 유저는 3개의 값 중 2개의 값을 입력하게 됩니다. `gasPrice`가 높을수록 트랜잭션이 블록에 포함될 확률이 높아집니다. + +## 거버넌스 참가하기 + +### 거버넌스에 대해서 + +코스모스 허브는 아톰을 스테이킹 한 위임자들이 투표를 할 수 있는 시스템이 내장되어있습니다. 프로포절의 종류는 3개가 있으며 다음과 같습니다: + +- `텍스트 프로포절(Text Proposals)`: 가장 기본적인 형태의 프로포절입니다. 특정 주제에 대한 네트워크의 의견을 확인하기 위해서 사용됩니다. +- `파라미터 프로포절(Parameter Proposals)`: 네트워크의 기존 파라미터 값을 변경하는 것을 제안하기 위해서 사용됩니다. +- `소프트웨어 업그레이드 프로포절(Software Upgrade Proposal)`: 코스모스 허브의 소프트웨어를 업그레이드 하는 것을 제안하기 위해서 사용됩니다. + +모든 아톰 보유자는 프로포절을 제안할 수 있습니다. 특정 프로포절의 투표가 활성화되기 위해서는 `minDeposit`값에 정의된 예치금 보다 높은 `deposit` 비용이 예치되어야 합니다. `deposit`은 프로포절 제안자 외에도 예치를 할 수 있습니다. 만약 제안자가 충분하지 않은 `deposit`을 예치한 경우, 프로포절은 `deposit_period` 상태로 들어가 추가 예치금을 대기합니다. 모든 아톰 보유자는 `depositTx` 트랜잭션을 통해 예치금을 추가할 수 있습니다. + +프로포절의 `deposit`이 `minDeposit`을 도달하게 되면 해당 프로포절의 2주 간의 `voting_period`(투표 기간)이 시작됩니다. **위임된 아톰**의 보유자는 해당 프로포절에 투표를 행사할 수 있으며, `Yes`, `No`, `NoWithVeto` 또는 `Abstain` 표를 선택할 수 있습니다. 각 표는 투표자의 위임된 아톰 수량을 반영하게 됩니다. 만약 위임자가 직접 투표를 진행하지 않은 경우, 위임자는 검증인의 표를 따르게 됩니다. 하지만 모든 위임자는 직접 투표를 행사하여 검증인의 표와 다른 표를 행사할 수 있습니다. + +투표 기간이 끝난 후, 프로포절이 50% 이상의 `Yes`표를 받았고 (`Abstain` 표를 제외하고) `NoWithVeto` (`Abstain` 표를 제외하고) 표가 33.33% 이하일 경우 통과하게 됩니다. + +### 거버넌스 트랜잭션 + +::: warning +**참고: 다음 명령어는 온라인 상태인 컴퓨터에서만 진행이 가능합니다. 해당 명령은 렛저 하드웨어 월렛 기기를 사용해 실행하는 것을 추천드립니다. 오프라인으로 트랜잭션을 발생하는 방법을 확인하기 위해서는 [여기](#signing-transactions-from-an-offline-computer)를 참고하세요.** +::: + +```bash +// 프로포절 제안하기 +// <프로포절 종류(type)>=text/parameter_change/software_upgrade +// 플래그 값 예시: <가스 가격(gasPrice)>=0.0001stake + +gaiacli tx gov submit-proposal --title "Test Proposal" --description "My awesome proposal" --type <프로포절 종류(type)> --deposit=10stake --gas auto --gas-prices <가스 가격(gasPrice)> --from <위임자 키 명칭(delegatorKeyName)> + +// 프로포절의 예치금 추가하기 +// 프로포절의 proposalID 조회: $gaiacli query gov proposals --status deposit_period +// 파라미터 값 예시: <예치금(deposit)>=1stake + +gaiacli tx gov deposit <프로포절 ID(proposalID)> <추가할 예치금(deposit)> --gas auto --gas-prices <가스 가격(gasPrice)> --from <위임자 키 명칭(delegatorKeyName)> + +// 프로포절에 투표하기 +// 프로포절의 proposalID 조회: $gaiacli query gov proposals --status voting_period +// <표 선택(option)>=yes/no/no_with_veto/abstain + +gaiacli tx gov vote <프로포절 ID(proposalID)> <표 선택(option)> --gas auto --gas-prices <가스 가격(gasPrice)> --from <위임자 키 명칭(delegatorKeyName)> +``` + +## 오프라인 컴퓨터에서 트랜잭션 서명하기 + +렛저 기기가 없거나 오프라인 컴퓨터에서 프라이빗 키를 관리하고 싶으신 경우, 다음 절차를 따라하세요. 우선 **온라인** 컴퓨터에서 미서명 트랜잭션을 다음과 같이 생성하십시오 (예시 명령어에는 본딩 트랜잭션이 포함되어 있습니다): + +```bash +// 아톰 본딩하기 +// 플래그 값 예시: <본딩할 수량(amountToBond)>=10000stake, <위임할 검증인의 bech32 주소(bech32AddressOfValidator)>=cosmosvaloper18thamkhnj9wz8pa4nhnp9rldprgant57pk2m8s, <가스 가격(gasPrice)>=0.001stake + +gaiacli tx staking --amount <본딩할 수량(amountToBond)> --validator <위임할 검증인의 bech32 주소(bech32AddressOfValidator)> --gas auto --gas-prices <가스 가격(gasPrice)> --generate-only > unsignedTX.json +``` + +이후 서명이 진행되지 않은 `unsignedTx.json` 파일을 복사하신 후 (USB 등을 이용하여) 오프라인 컴퓨터로 이동하십시오. 만약 오프라인 컴퓨터에 아직 계정을 생성하지 않으셨을 경우, [이 항목](#using-a-computer)을 참고하여 오프라인 컴퓨터에서 계정을 생성하세요. 안전을 위해서 서명하기 전에 다음 명령어를 실행해 트랜잭션의 파라미터를 한번 더 확인하십시오: + +```bash +cat unsignedTx.json +``` + +이제 다음 명령어를 실행해 트랜잭션을 서명합니다: + +```bash +gaiacli tx sign unsignedTx.json --from <위임자 키 명칭(delegatorKeyName)> > signedTx.json +``` + +서명된 `signedTx.json` 파일을 복사하시고 다시 온라인 컴퓨터로 이동하세요. 다음 명령어를 실행해 해당 트랜잭션을 네트워크에 전파하세요: + +```bash +gaiacli tx broadcast signedTx.json +``` \ No newline at end of file diff --git a/docs/translations/kr/gaia/deploy-testnet.md b/docs/translations/kr/gaia/deploy-testnet.md new file mode 100755 index 0000000000..303847d769 --- /dev/null +++ b/docs/translations/kr/gaia/deploy-testnet.md @@ -0,0 +1,249 @@ +# 자체 테스트넷 구축하기 + +해당 문서는 `gaiad` 노드 네트워크를 구축하는 세가지 방법을 제시합니다. 각 모델은 다른 이용 사례에 특화되어 있습니다. + +1. 싱글-노드, 로컬, 수동 테스트넷 +2. 멀티-노드, 로컬, 자동 테스트넷 +3. 멀티-노드, 리모트, 자동 테스트넷 + +관련 코드는 [네트워크 디렉토리](https://github.com/cosmos/cosmos-sdk/tree/develop/networks)와 하단의 `local`과 `remote` 서브 디렉토리에서 찾으실 수 있습니다. + +> 참고: 현재 `remote` 관련 정보는 최신 릴리즈와 호환성이 맞지 않을 수 있으므로 참고하시기 바랍니다. + +## 싱글-노드, 로컬, 수동 테스트넷 + +이 가이드는 하나의 검증인 노드를 로컬 환경에서 운영하는 방식을 알려드립니다. 이런 환경은 테스트/개발 환경을 구축하는데 이용될 수 있습니다. + +### 필수 사항 + +- [gaia 설치](./installation.md) +- [`jq` 설치](https://stedolan.github.io/jq/download/) (선택 사항) + +### 제네시스 파일 만들기, 네트워크 시작하기 + +```bash +# You can run all of these commands from your home directory +cd $HOME + +# Initialize the genesis.json file that will help you to bootstrap the network +gaiad init --chain-id=testing testing + +# Create a key to hold your validator account +gaiacli keys add validator + +# Add that key into the genesis.app_state.accounts array in the genesis file +# NOTE: this command lets you set the number of coins. Make sure this account has some coins +# with the genesis.app_state.staking.params.bond_denom denom, the default is staking +gaiad add-genesis-account $(gaiacli keys show validator -a) 1000stake,1000validatortoken + +# Generate the transaction that creates your validator +gaiad gentx --name validator + +# Add the generated bonding transaction to the genesis file +gaiad collect-gentxs + +# Now its safe to start `gaiad` +gaiad start +``` + +이 셋업은 모든 `gaiad` 정보를 `~/.gaiad`에 저장힙니다. 생성하신 제네시스 파일을 확인하고 싶으시다면 `~/.gaiad/config/genesis.json`에서 확인이 가능합니다. 위의 세팅으로 `gaiacli`가 이용이 가능하며, 토큰(스테이킹/커스텀)이 있는 계정 또한 함께 생성됩니다. + +## 멀티 노드, 로컬, 자동 테스트넷 + +관련 코드 [networks/local 디렉토리](https://github.com/cosmos/cosmos-sdk/tree/develop/networks/local): + +### 필수 사항 + +- [gaia 설치](./installation.md) +- [docker 설치](https://docs.docker.com/engine/installation/) +- [docker-compose 설치](https://docs.docker.com/compose/install/) + +### 빌드 + +`localnet` 커맨드를 운영하기 위한 `gaiad` 바이너리(리눅스)와 `tendermint/gaiadnode` docker 이미지를 생성합니다. 해당 바이너리는 컨테이너에 마운팅 되며 업데이트를 통해 이미지를 리빌드 하실 수 있습니다. + +Build the `gaiad` binary (linux) and the `tendermint/gaiadnode` docker image required for running the `localnet` commands. This binary will be mounted into the container and can be updated rebuilding the image, so you only need to build the image once. + +```bash +# Work from the SDK repo +cd $GOPATH/src/github.com/cosmos/cosmos-sdk + +# Build the linux binary in ./build +make build-linux + +# Build tendermint/gaiadnode image +make build-docker-gaiadnode +``` + +### 테스트넷 실행하기 + +4개 노드 테스트넷을 실행하기 위해서는: + +``` +make localnet-start +``` + +이 커맨드는 4개 노드로 구성되어있는 네트워크를 gaiadnode 이미지를 기반으로 생성합니다. 각 노드의 포트는 하단 테이블에서 확인하실 수 있습니다: + + +| 노드 ID | P2P 포트 | RPC 포트 | +| --------|-------|------| +| `gaianode0` | `26656` | `26657` | +| `gaianode1` | `26659` | `26660` | +| `gaianode2` | `26661` | `26662` | +| `gaianode3` | `26663` | `26664` | + +바이너리를 업데이트 하기 위해서는 리빌드를 하신 후 노드를 재시작 하시면 됩니다: + +``` +make build-linux localnet-start +``` + +### 설정 + +`make localnet-start`는 `gaiad testnet` 명령을 호출하여 4개 노드로 구성된 테스트넷에 필요한 파일을 `./build`에 저장합니다. 이 명령은 `./build` 디렉토리에 다수의 파일을 내보냅니다. + + +```bash +$ tree -L 2 build/ +build/ +├── gaiacli +├── gaiad +├── gentxs +│   ├── node0.json +│   ├── node1.json +│   ├── node2.json +│   └── node3.json +├── node0 +│   ├── gaiacli +│   │   ├── key_seed.json +│   │   └── keys +│   └── gaiad +│   ├── ${LOG:-gaiad.log} +│   ├── config +│   └── data +├── node1 +│   ├── gaiacli +│   │   └── key_seed.json +│   └── gaiad +│   ├── ${LOG:-gaiad.log} +│   ├── config +│   └── data +├── node2 +│   ├── gaiacli +│   │   └── key_seed.json +│   └── gaiad +│   ├── ${LOG:-gaiad.log} +│   ├── config +│   └── data +└── node3 + ├── gaiacli + │   └── key_seed.json + └── gaiad + ├── ${LOG:-gaiad.log} + ├── config + └── data +``` + +각 `./build/nodeN` 디렉토리는 각자 컨테이너 안에 있는 `/gaiad`에 마운팅 됩니다. + +### 로깅 + +로그는 각 `./build/nodeN/gaiad/gaia.log`에 저장됩니다. 로그는 docker를 통해서 바로 확인하실 수도 있습니다: + +``` +docker logs -f gaiadnode0 +``` + +### 키와 계정 + +`gaiacli`를 이용해 tx를 생성하거나 상태를 쿼리 하시려면, 특정 노드의 `gaiacli` 디렉토리를 `home`처럼 이용하시면 됩니다. 예를들어: + + +```shell +gaiacli keys list --home ./build/node0/gaiacli +``` +이제 계정이 존재하니 추가로 새로운 계정을 만들고 계정들에게 토큰을 전송할 수 있습니다. + +::: tip +**참고**: 각 노드의 시드는 `./build/nodeN/gaiacli/key_seed.json`에서 확인이 가능하며 `gaiacli keys add --restore` 명령을 통해 CLI로 복원될 수 있습니다. +::: + +### 특수 바이너리 + +다수의 이름을 가진 다수의 바이너리를 소유하신 경우, 어떤 바이너리의 환경 변수(environment variable)를 기준으로 실행할지 선택할 수 있습니다. 바이너리의 패스(path)는 관련 볼륨(volume)에 따라 달라집니다. 예시: +``` +# Run with custom binary +BINARY=gaiafoo make localnet-start +``` + +## 멀티 노드, 리모트, 자동 테스트넷 + +다음 환경은 [네트워크 디렉터리](https://github.com/cosmos/cosmos-sdk/tree/develop/networks)에서 실행하셔야 합니다. + +### Terraform 과 Ansible + +자동 디플로이멘트(deployment)는 [Terraform](https://www.terraform.io/)를 이용해 AWS 서버를 만든 후 [Ansible](http://www.ansible.com/)을 이용해 해당 서버에서 테스트넷을 생성하고 관리하여 운영됩니다. + +### 필수 사항 + +- [Terraform](https://www.terraform.io/downloads.html) 과 [Ansible](http://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html)를 리눅스 머신에 설치. +- EC2 create 권한이 있는 [AWS API 토큰](https://docs.aws.amazon.com/general/latest/gr/managing-aws-access-keys.html) 생성 +- SSH 키 생성. + +``` +export AWS_ACCESS_KEY_ID="2345234jk2lh4234" +export AWS_SECRET_ACCESS_KEY="234jhkg234h52kh4g5khg34" +export TESTNET_NAME="remotenet" +export CLUSTER_NAME= "remotenetvalidators" +export SSH_PRIVATE_FILE="$HOME/.ssh/id_rsa" +export SSH_PUBLIC_FILE="$HOME/.ssh/id_rsa.pub" +``` + +해당 명령은 `terraform` 과 `ansible`에서 이용됩니다.. + +### 리모트 네트워크 만들기 + +``` +SERVERS=1 REGION_LIMIT=1 make validators-start +``` + +테스트넷 이름은 --chain-id에서 이용될 값이며, 클러스터 이름은 AWS 서버 관리 태그에서 이용될 값입니다. 코드는 각 존의 + +The testnet name is what's going to be used in --chain-id, while the cluster name is the administrative tag in AWS for the servers. The code will create SERVERS amount of servers in each availability zone up to the number of REGION_LIMITs, starting at us-east-2. (us-east-1 is excluded.) The below BaSH script does the same, but sometimes it's more comfortable for input. + +``` +./new-testnet.sh "$TESTNET_NAME" "$CLUSTER_NAME" 1 1 +``` + +### Quickly see the /status endpoint + +``` +make validators-status +``` + +### Delete servers + +``` +make validators-stop +``` + +### Logging + +You can ship logs to Logz.io, an Elastic stack (Elastic search, Logstash and Kibana) service provider. You can set up your nodes to log there automatically. Create an account and get your API key from the notes on [this page](https://app.logz.io/#/dashboard/data-sources/Filebeat), then: + +``` +yum install systemd-devel || echo "This will only work on RHEL-based systems." +apt-get install libsystemd-dev || echo "This will only work on Debian-based systems." + +go get github.com/mheese/journalbeat +ansible-playbook -i inventory/digital_ocean.py -l remotenet logzio.yml -e LOGZIO_TOKEN=ABCDEFGHIJKLMNOPQRSTUVWXYZ012345 +``` + +### Monitoring + +You can install the DataDog agent with: + +``` +make datadog-install +``` diff --git a/docs/translations/kr/gaia/gaiacli.md b/docs/translations/kr/gaia/gaiacli.md new file mode 100755 index 0000000000..2feb51d371 --- /dev/null +++ b/docs/translations/kr/gaia/gaiacli.md @@ -0,0 +1,758 @@ +# Gaia 클라이언트 + +## Gaia CLI + +::: tip 참고 +다음과 같은 에러 메시지가 나오는 경우: + +```bash +Must specify these options: --chain-id when --trust-node is false +``` + +라이트 클라이언트 증거를 검증할지 선택하셔야 합니다. 만약 쿼리를 요청하고 있는 노드를 신뢰할 수 있다면, `--trust-node=true`를 입력하시고, 그렇지 않다면 `--chain-id`를 입력하세요. +::: + +`gaiacli`는 코스모스 테스트넷에서 이루어지는 트랜잭션과 계정을 관리하는 커맨드 라인 인터페이스입니다. 다음은 유용할 수 있는 `gaiacli` 명령어입니다: + +`gaiacli`의 설정 파일은 `$HOME/.gaiacli/config/config.toml` 경로에 저장되며, 파일 수정 또는 `gaiacli config` 명령어를 통해 수정할 수 있습니다: + +```bash +gaiacli config chain-id gaia-9004 +``` + +명령어 사용에 관련한 정보는 help를 참고하세요: `gaiacli config --help`. + +이 문서에는 유용한 `gaiacli` 명령어와 예시가 포함되어있습니다. + +### 키(Keys) + +#### 키 종류 + +키의 형태는 총 3개가 있습니다: + +- `cosmos` + - `gaiacli keyts add`로 생성되는 계정 키 + - 자금을 받는데 사용 + - 예시) `cosmos15h6vd5f0wqps26zjlwrc6chah08ryu4hzzdwhc` + +* `cosmosvaloper` + - 특정 검증인을 운영자와 연관하는데 사용됨 + - 스테이킹 명령 요청에 이용됨 + - 예시) `cosmosvaloper1carzvgq3e6y3z5kz5y6gxp3wpy3qdrv928vyah` + +- `cosmospub` + - `gaiacli keys add`로 생성되는 계정 키 + - 예시) `cosmospub1zcjduc3q7fu03jnlu2xpl75s2nkt7krm6grh4cc5aqth73v0zwmea25wj2hsqhlqzm` +- `cosmosvalconspub` + - `gaiad init`로 새로운 노드가 생성될때 같이 생성되는 키. + - `gaiad tendermint show-validator` 명령으로 키 값을 확인할 수 있음 + - 예시) `cosmosvalconspub1zcjduepq0ms2738680y72v44tfyqm3c9ppduku8fs6sr73fx7m666sjztznqzp2emf` + +#### 키 생성하기 + +자금을 받거나, 트랜잭션을 전송하거나, 스테이킹을 하기 위해서는 프라이빗 키(`sk`)와 퍼블릭 키(`pk`) 쌍이 필요합니다. + +새로운 _secp256k1_ 키를 생성하기 위해서는: + +```bash +gaiacli keys add +``` + +새로운 키를 생성하는 과정에서 나오는 _시트키(seed phrase)_ 는 안전하게 저장하시길 바랍니다. 시드키는 다음과 같은 명령을 이용해 잊어버린 퍼블릭/프라이빗 키를 복구하는데 이용됩니다: + +```bash +gaiacli keys add --recover +``` + +이제 프라이빗 키를 확인하고 ``을 찾으면 됩니다: + +```bash +gaiacli keys show +``` + +검증인 운영자 주소는 다음과 같이 확인하시고: + +```shell +gaiacli keys show --bech=val +``` + +관련 되어 있는 모든 키 목록은 다음 명령어로 찾으실 수 있습니다: + +```bash +gaiacli keys list +``` + +본인 노드의 검증인 pubkey는 다음과 같이 확인할 수 있습니다: + +```bash +gaiad tendermint show-validator +``` + +위 키는 텐더민트 사이닝 키이며, 위임 트랜잭션에서 이용되는 오퍼레이터 키가 아니라는 점을 참고하세요. + +::: danger 경고 +다수의 키에 동일한 passphrase를 이용하는 것을 추천하지 않습니다. 텐더민트 팀과 인터체인 재단은 자산 손실에 대한 책임을 지지 않습니다. +::: + +#### 멀티시그 퍼블릭 키 생성하기 + +새로운 멀티시그 퍼블릭키를 생성하고 확인하시려면 다음과 같은 명령을 입력하세요: + +```bash +gaiacli keys add --multisig=name1,name2,name3[...] --multisig-threshold=K new_key_name +``` + +여기서 `K`는 트랜잭션이 승인되기 위해서 필요한 최소의 키 개수입니다. + +`--multisig` 플래그는 로컬 데이터베이스에 `new_key_name`으로 저장될 멀티시그 퍼블릭 키를 생성할때 사용되는 다수의 퍼블릭 키들의 값을 뜻합니다. `--multisig` 값에 포함될 키들은 로컬 데이터베이스에 존재하는 상태여야 합니다. `--nosort` 플래그가 정의된지 않은 경우, 멀티시그 조합에 필요한 키들이 입력되는 순서는 무관합니다. 예를 들어 다음 두 명령어는 두개의 동일한 멀티시그 퍼블릭 키를 생성합니다: + +```bash +gaiacli keys add --multisig=foo,bar,baz --multisig-threshold=2 multisig_address +gaiacli keys add --multisig=baz,foo,bar --multisig-threshold=2 multisig_address +``` + +멀티시그 키의 주소는 다음과 같이 빠르게 생성하여 커맨드라인에 프린트할 수 있습니다: + +```bash +gaiacli keys show --multisig-threshold K name1 name2 name3 [...] +``` + +멀티시그 트랜잭션를 생성, 사인, 전파하는 방법은 [멀티시그 트랜잭션](#멀티시그-트랜잭션) 항목을 참고하세요. + +### 수수료와 가스 + +각 트랜잭션은 수수료(fee)를 지정하거나 가스 가격(gas price)을 지정할 수 있지만, 두 값을 함께 지정하는 것은 불가능합니다. 대다수의 유저는 지정된 비용만을 수수료로 사용하기 위해 수수료(fee)를 지정하는 방식으로 트랜잭션을 발생할 것으로 예상됩니다. + +각 검증인은 최소 가스 가격(minimum gas price)를 (다수 토큰 사용 가능) 설정할 수 있으며 이 값을 기준으로 `CheckTx` 단계에서 특정 트랜잭션을 블록에 포함시킬지 확인합니다. `gasPrices >= minGasPrices`일때 검증인은 트랜잭션을 처리합니다. 참고로 트랜잭션 전파시 검증인이 요구하는 토큰 중 하나를 수수료 지불 토큰으로 사용하셔야 합니다. + +__참고__: 위와 같은 메커니즘에서 일부 검증인은 멤풀에 있는 트랜잭션 중 높은 `gasPrice`의 트랜잭션을 우선적으로 처리할 수 있습니다. 그렇기 때문에 높은 수수료는 트랜잭션 처리 우선 순위를 높힐 수 있습니다. + +예시) + +```bash +gaiacli tx send ... --fees=100photino +``` + +또는 + +```bash +gaiacli tx send ... --gas-prices=0.000001stake +``` + +### 계정 + +#### 테스트 토큰 받기 + +토큰을 받기 가장 쉬운 곳은 [코스모스 테스트넷 faucet](https://faucetcosmos.network) 입니다. 만약 해당 faucet이 작동하지 않는 경우 [#cosmos-validators](https://riot.im/app/#/room/#cosmos-validators:matrix.org) 채팅 방에서 요청을 하실 수 있습니다. 해당 faucet은 스테이킹을 하려고 하시는 계정의 `cosmos` 주소를 입력하시면 됩니다. + +#### 계정 잔고 조회하기 + +주소에 토큰을 받으신 후 잔고를 확인하시려면 다음 명령어를 입력하시면 됩니다: + +```bash +gaiacli query account +``` + +::: warning 참고 +계정의 토큰 잔고가 `0`인 계정을 조회하실 경우 다음과 같은 에러 메시지가 표시될 수 있습니다: `No account with address was found in the state.` 노드가 체인과 완벽하게 연동이 안된 상태에서 조회를 할 경우 동일한 에러가 발생할 수 있습니다. +::: + +### 토큰 전송하기 + +한 계정에서 다른 계정으로 토큰/코인을 전송하기 위해서는 다음 명령어를 이용하시면 됩니다: + +```bash +gaiacli tx send 10faucetToken \ + --chain-id= \ + --from= \ +``` + +::: warning 참고 +`--amount` 플래그는 다음과 같은 포맷을 사용합니다 `--amount=<수량|코인 이름>`. +::: + +::: tip 참고 +해당 트랜잭션이 사용하는 가스 값의 최대치를 설정하기 원하시면 `--gas` 플래그를 이용하세요. 만약 `--gas=auto`를 이용하시는 경우, 트랜잭션이 실행되기 전에 가스 서플라이가 자동으로 예측됩니다. 예측된 가스 값과 실제 트랜잭션이 일어나는 사이에 블록체인 상태가 변경될 수 있으며, 기존 예측 수량에서 값이 변경이 될 수 있다는 점을 유의하세요. 변경 값은 `--gas-adjustment` 플래그를 이용해 설정하실 수 있으며 기본 값은 1.0입니다. +::: + +이제 토큰을 전송한 계정과 토큰을 받은 계정의 잔고를 확인합니다: + +```bash +gaiacli query account +gaiacli query account +``` + +특정 블록에서의 잔고를 확인하고 싶으시다면 `--block` 플래그를 사용하실 수 있습니다: + +```bash +gaiacli query account --block= +``` + +트랜잭션을 실제 전파하지 않고 시뮬레이션을 하시려면 명령어 뒤에 `--dry-run` 플래그를 추가하세요: + +```bash +gaiacli tx send 10faucetToken \ + --chain-id= \ + --from= \ + --dry-run +``` + +또한 트랜잭션을 빌드한 후 해당 트랜잭션을 JSON 포맷으로 STDOUT에 프린트 하시기를 원하면 `--generate-only`를 명령어에 추가하시면 됩니다: + +```bash +gaiacli tx send 10faucetToken \ + --chain-id= \ + --from= \ + --generate-only > unsignedSendTx.json +``` + +::: tip 참고 +시뮬레이션은 퍼블릭 키를 필요로 하고 generate only는 키베이스를 사용하지 않기 때문에 시뮬레이션은 tx generate only 기능과 함께 사용될 수 없습니다. +::: + +이제 `--generate-only`를 통해 프린트된 트랜잭션 파일을 서명하시려면 다음 명령어를 통해 키를 입력하시면 됩니다: + +```bash +gaiacli tx sign \ + --chain-id= \ + --from= + unsignedSendTx.json > signedSendTx.json +``` + +트랜잭션의 서명을 검증하기 위해서는: + +```bash +gaiacli tx sign --validate-signatures signedSendTx.json +``` + +서명된 트랜잭션을 노드로 전파하기 위해서는 JSON 파일을 다음 명령어를 통해 전달하면 됩니다: + +```bash +gaiacli tx broadcast --node= signedSendTx.json +``` + +### 트랜잭션 조회하기 + +#### 태그 매칭하기 + +트랜잭션 검색 명령을 이용하여 모든 트랜잭션에 추가되는 특정 `tags` 세트를 검색할 수 있습니다. + +각 태그의 키-값 페어는 `:` 형태로 이루어집니다. 더 상세한 검색을 원하실 경우 `&` 를 사용하여 태그를 추가할 수 있습니다. + +`tag`를 이용한 트랜잭션 조회는 다음과 같이 합니다: + +```bash +gaiacli query txs --tags=':' +``` + +다수의 `tags`를 이용하실 경우: + +```bash +gaiacli query txs --tags=':&:' +``` + +페이지네이션은 `page`와 `limit` 값으로 지원됩니다. + +```bash +gaiacli query txs --tags=':' --page=1 --limit=20 +``` + +::: tip 참고 + +액션 태그는 관련 메시지의 `Type()` 명령이 응답하는 메시지 타입과 언제나 동일합니다. + +각 SDK 모듈에 대한 `tags`는 여기에서 확인할 수 있습니다: + +- [Common tags](https://github.com/cosmos/cosmos-sdk/blob/d1e76221d8e28824bb4791cb4ad8662d2ae9051e/types/tags.go#L57-L63) +- [Staking tags](https://github.com/cosmos/cosmos-sdk/blob/d1e76221d8e28824bb4791cb4ad8662d2ae9051e/x/staking/tags/tags.go#L8-L24) +- [Governance tags](https://github.com/cosmos/cosmos-sdk/blob/d1e76221d8e28824bb4791cb4ad8662d2ae9051e/x/gov/tags/tags.go#L8-L22) +- [Slashing tags](https://github.com/cosmos/cosmos-sdk/blob/d1e76221d8e28824bb4791cb4ad8662d2ae9051e/x/slashing/handler.go#L52) +- [Distribution tags](https://github.com/cosmos/cosmos-sdk/blob/develop/x/distribution/tags/tags.go#L8-L17) +- [Bank tags](https://github.com/cosmos/cosmos-sdk/blob/d1e76221d8e28824bb4791cb4ad8662d2ae9051e/x/bank/keeper.go#L193-L206) +::: + +#### 트랜잭션 해시로 검색하기 + +다음과 같은 명령어를 이용하여 한 트랜잭션의 해시값을 이용해 조회를 할 수 있습니다: + +```bash +gaiacli query tx [hash] +``` + +### 슬래싱 + +#### 언제일(Unjailing) + +제일링 된 검증인을 언제일 하기 위해서는: + +```bash +gaiacli tx slashing unjail --from +``` + +#### 서명 정보 + +특정 검증인의 서명 정보를 확인하기 위해서는: + +```bash +gaiacli query slashing signing-info +``` + +#### 슬래싱 파라미터 조회 + +현재 슬래싱 파라미터를 확인하기 위해서는: + +```bash +gaiacli query slashing params +``` + +### 스테이킹 + +#### 검증인 세팅하기 +검증인 후보가 되기 위한 가이드는 [검증인 세팅](../validators/validator-setup.md) 문서를 참고하세요. + +#### 검증인에게 위임하기 + +메인넷에서는 `atom`을 특정 검증인에게 위임할 수 있습니다. 스테이킹에 참여하는 [위임인](/resources/delegators-faq)은 검증인 보상의 일부를 받을 수 있습니다. 관련 정보는 [코스모스 토큰 모델](https://github.com/cosmos/cosmos/raw/master/Cosmos_Token_Model.pdf)에서 확인하세요. + +##### 검증인 조회하기 + +특정 체인의 모든 검증인 목록을 확인하기 위해서는 다음 명령을 실행하세요: + +```bash +gaiacli query staking validators +``` + +특정 검증인에 대한 정보를 원하실 경우 다음 명령을 실행하세요: + +```bash +gaiacli query staking validator +``` + +#### 토큰 본딩하기 + +테스트넷의 경우 `atom`이 아닌 `steak`를 위임합니다. 특정 테스트넷 검증인에게 토큰을 본딩하기 위해서는: + + +```bash +gaiacli tx staking delegate \ + --amount=10steak \ + --validator= \ + --from= \ + --chain-id= +``` + +`` 는 검증 대상 검증인의 운영자 주소입니다. 로컬 테스트넷을 운영하시는 경우, 다음 명령어로 관련 주소를 확인하실 수 있습니다: + +```bash +gaiacli keys show [name] --bech val +``` + +여기에서`[name]`은 `gaiad`를 처음 설정하셨을때 정의한 키의 명칭입니다. + +토큰이 본딩되고 있는 기간 동안에는 다른 본딩된 토큰과 함께 하나의 '풀'을 이룹니다. 검증인들과 위임인들은 해당 풀의 소유량에 비례하는 보상을 받게 됩니다. + + +::: tip 참고 +보유하고 있는 `steak` 이상을 사용하지 마세요. `steak`가 더 필요한 경우 [Faucet](https://faucetcosmos.network/)에서 추가로 받으실 수 있습니다! +::: + +##### 위임 조회 + +위임 요청을 검증인에게 전송한 경우, 관련 정보를 다음 명령을 통해 조회하실 수 있습니다: + +```bash +gaiacli query staking delegation + +``` + +만약 특정 검증인에 대한 모든 위임 상태를 확인하고 싶으실 경우 다음 명령을 이용하세요: + +```bash +gaiacli query staking delegation +``` + +과거 위임 기록에 대해서는 `--height` 플래그를 추가 하셔서 해당 블록 높이에 대한 기록을 조회하실 수 있습니다. + +#### 토큰 언본딩 하기 + +만약 특정 검증인이 악의적인 행동을 했거나 또는 본인이 개인적인 이유로 일부 토큰을 언본딩을 워하는 경우 다음 명령어를 통해 토큰을 언본딩 할 수 있습니다. 언본딩은 정확한 수량인 `shares-amount`(예시, `12.1`) 또는 언본딩을 원하는 물량의 비율인 `shares-fraction`(예시, `0.25`) 값으로 표현될 수 있습니다. + + +```bash +gaiacli tx staking unbond \ + --validator= \ + --shares-fraction=0.5 \ + --from= \ + --chain-id= +``` + +언본딩은 언본딩 기간이 끝나는 대로 완료됩니다. + +##### 언본딩 조회하기 + +언본딩 절차를 시작하신 후 관련 정보를 조회하는 방법은 다음과 같습니다: + +```bash +gaiacli query staking unbonding-delegation +``` + +또는 모든 언본딩 정보를 확인하고 싶으신 경우: + +```bash +gaiacli query staking unbonding-delegations +``` + +추가적으로 특정 검증인으로 부터 언본딩하는 정보를 확인하고 싶으신 경우: + +```bash +gaiacli query staking unbonding-delegations-from +``` + +과거 언본딩 정보는 `--height` 플래그를 통해서 특정 블록 높이에 대한 언본딩 정보를 조회할 수 있습니다. + +#### 재위임(Redelegate) 하기 + +재위임이란 본딩 되어있는 토큰을 한 검증인으로 부터 다른 검증인으로 옮기는 것입니다: + +```bash +gaiacli tx staking redelegate \ + --addr-validator-source= \ + --addr-validator-dest= \ + --shares-fraction=50 \ + --from= \ + --chain-id= +``` + +위 예시와 같이 재위임될 토큰의 수량은 특정 수량(`shares-amount`) 또는 일정 비율(`shares-fraction`)로 표현될 수 있습니다. + +언본딩 기간이 지나면 재위임은 자동으로 완료됩니다. + +##### 재위임 조회하기 + +재위임을 시작하신 후, 다음 명령을 통해서 관련 정보를 조회하실 수 있습니다: + +```bash +gaiacli query staking redelegation +``` + +모든 검증인에 대한 재위임을 확인하고 싶으신 경우: + +```bash +gaiacli query staking redelegations +``` + +특정 검증인에 대한 재위임을 확인하고 싶으신 경우: + +```bash + gaiacli query staking redelegations-from +``` + +과거 재위임에 대한 정보는 다른 트랜잭션과 동일하게 `--height` 플래그를 이용하여 특정 블록 높이에 대한 재위임 정보를 확인하실 수 있습니다. + +#### 파라미터 조회 + +파라미터는 스테이킹의 하이-레벨 설정을 정의합니다. 현재 값은 다음 명령어를 통해서 조회할 수 있습니다: + +```bash +gaiacli query staking params +``` + +위 명령어는 다음과 같은 정보를 표기합니다: + +- 언본딩 기간 +- 최대 검증인 수 +- 스테이킹 코인 표기 + +해당 값은 거버넌스 절차의 `ParameterChange`(파라미터 변경) 프로포절을 통해서 변경됩니다. + +#### 스테이킹 풀 조회하기 + +스티이킹 풀은 현재 상태(state)에 대한 다이내믹 파라미터(dynamic parameter)를 정의합니다. 관련 정보는 다음 명령을 통해 조회할 수 있습니다: + +```bash +gaiacli query staking pool +``` + +`pool` 명령은 다음과 같은 정보에 대한 현재 값을 제공합니다: +- 본딩된 토큰 / 본딩 되어있지 않은 토큰 +- 총 토큰 수량 +- 연 인플레이션 비율과 가장 최근에 인플레이션이 변경된 블록 높이 +- 가장 최근 기록된 bonded shares + +##### 검증인 위임 조회하기 + +특정 검증인에 대한 모든 위임은 다음 명령으로 조회가 가능합니다: + +```bash + gaiacli query delegations-to +``` + +### 거버넌스 + +거버넌스는 코스모스 허브의 유저가 소프트웨어 업그레이드, 메인넷 파라미터 또는 문서 형태의 프로포절 등에 대한 합의를 하는 절차입니다. 유저는 프로포절에 대한 투표를 함으로 이 절차에 참여할 수 있으며, 투표권은 메인넷 아톰 홀더들에게만 주어집니다. + +다음은 투표 절차에 대한 정보입니다: + +- 투표권은 본딩된 `Atom`을 소유한 유저에게만 주어지며, `본딩된 아톰 1개 = 1표` 기준으로 집계됩니다 +- 투표권을 행사하지 않은 위임인들은 본인이 위임한 검증인들의 투표를 따르게 됩니다 +- **검증인은 모든 프로포절에 투표를 해야합니다.** 프로포절에 투표를 하지 않는 검증인들은 부분적 슬래싱 페널티를 받게 됩니다 +- 표는 각 프로포절의 투표 마감 시점(메인넷 기준 2주)에서 집계됩니다. 각 계정은 투표기간 중 표를 변경할 수 있으며(트랜잭션 수수료는 부과됩니다), 가장 마지막 표가 유효한 표로 집계됩니다 +- 투표자들은 `Yes`, `No`, `NoWithVeto`와 `Abstain` 중에서 하나를 선택하여 투표할 수 있습니다 +- 프로포절은 `(YesVote/(YesVotes+NoVotes+NoWithVetoVotes))>1/2` 또는 `(NoWithVetoVotes/(YesVotes+NoVotes+NoWithVetoVotes))<1/3`일 경우에만 통과하며, 이 외의 경우 부결됩니다. + +거버넌스 절차에 대한 더 자세한 정보는 [거버넌스 모듈 스펙](./../spec/governance)을 확인하세요. + +#### 거버넌스 프로포절 생성하기 + +새로운 거버넌스 프로포절을 생성하기 위해서는 프로포절 정보와 일정의 보증금을 예치해야 합니다: + +- `title`: 프로포절 제목 +- `description`: 프로포절 설명 +- `type`: 프로포절 유형. _Text_ 형태여야 합니다 (_SoftwareUpgrade_ 와 _ParameterChange_ 는 아직 지원되지 않습니다). + +```bash +gaiacli tx gov submit-proposal \ + --title= \ + --description=<description> \ + --type=<Text/ParameterChange/SoftwareUpgrade> \ + --deposit=<40steak> \ + --from=<name> \ + --chain-id=<chain_id> +``` + +##### 프로포절 조회 + +프로포절이 생성된 후 관련 정보를 조회하는 방법은 다음과 같습니다: + +```bash +gaiacli query gov proposal <proposal_id> +``` + +모든 프로포절에 대한 조회를 하기 위해서는: + +```bash +gaiacli query gov proposals +``` + +프로포절을 `voter` 또는 `depositor`로 필터링 해서 조회할 수도 있습니다. + +특정 거버넌스 프로포절의 제안자를 확인하기 위해서는: + +```bash +gaiacli query gov proposer <proposal_id> +``` + +#### 보증금 추가하기 + +프로포절이 네트워크에 전파되기 위해서는 해당 프로포절의 보증금이 `minDeposit` 값 이상이어야 합니다 (현재 기본 값은 `10 steak`입니다). 만약 사전에 생성한 프로포절이 해당 기준을 충족하지 못하였다면 추후에 보증금을 추가 예치하여 활성화할 수 있습니다. 프로포절의 보증금이 최소 값을 도달하면 해당 프로포절의 투표는 활성화 됩니다: + +```bash +gaiacli tx gov deposit <proposal_id> <200steak> \ + --from=<name> \ + --chain-id=<chain_id> +``` + +> _참고_: 기본 보증금 기준을 충족하지 못한 프로포절은 `MaxDepositPeriod`이 지나면 자동으로 삭제됩니다. + +##### 보증금 조회하기 + +새로운 프로포절이 생성된 후, 해당 프로포절에 대한 보증금은 다음과 같이 조회할 수 있습니다: + +```bash +gaiacli query gov deposits <proposal_id> +``` + +특정 주소에 대한 보증금은 다음과 같이 확인하실 수 있습니다: + +```bash +gaiacli query gov deposit <proposal_id> <depositor_address> +``` + +#### 프로포절 투표하기 + +프로포절의 보증금이 `MinDeposit` 값에 도달하면 투표 기간이 시작됩니다. 본딩된 `Atom`을 보유한 홀더들은 각자 투표를 할 수 있습니다: + + +```bash +gaiacli tx gov vote <proposal_id> <Yes/No/NoWithVeto/Abstain> \ + --from=<name> \ + --chain-id=<chain_id> +``` + +##### 표 조회하기 + +특정 표와 관련한 정보를 조회하기 위해서는: + +```bash +gaiacli query gov vote <proposal_id> <voter_address> +``` +과거 프로포절에 대한 표 정보를 확인하기 위해서는: + +```bash +gaiacli query gov votes <proposal_id> +``` + +#### 프로포절 결과 조회하기 + +특정 프로포절에 대한 결과를 확인하기 위해서는: + +```bash +gaiacli query gov tally <proposal_id> +``` + +#### 거버넌스 파라미터 조회하기 + +현재 거버넌스 파라미터를 조회하기 위해서는: + +```bash +gaiacli query gov param voting +gaiacli query gov param tallying +gaiacli query gov param deposit +``` + +### 스테이킹 리워드 분배 + +#### 리워드 분배 파라미터 조회 + +현재 리워드 분배 파라미터 값을 조회하기 위해서는: + +```bash +gaiacli query distr params +``` + +#### 수령되지 않은 리워드를 받기 + +수령하지 않은 리워드를 수령하기 위해서는: + +```bash +gaiacli query distr outstanding-rewards +``` + +#### 검증인 커미션 조회 + +특정 검증인의 커미션을 조회하기 위해서는: + +```bash +gaiacli query distr commission <validator_address> +``` + +#### 검증인 슬래싱 조회 + +특정 검증인의 슬래싱 기록을 조회하기 위해서는: + +```bash +gaiacli query distr slashes <validator_address> <start_height> <end_height> +``` + +#### 특정 검증인에서 수령되지 않은 리워드 조회 + +위임자의 특정 검증인에서 발생된 미수령 리워드를 조회하기 위해서는: + +```bash +gaiacli query distr rewards <delegator_address> <validator_address> +``` + +#### 위임자의 수령 대기중인 모든 리워드 조회 + +위임자의 모든 수령 대기 리워드를 조회하기 위해서는: + +```bash +gaiacli query distr rewards <delegator_address> +``` + +### 멀티시그 트랜잭션 + +멀티시그 트랜잭션을 서명하기 위해서는 다수의 프라이빗 기가 필요합니다. 그렇기 때문에 멀티시그 계정에서 트랜잭션을 생성하고 서명하기 위해서는 여러 인원간의 협동이 필요합니다. 멀티시그 키 보유자 누구나 트랜잭션을 생성할 수 있으며, 멀티시그 퍼블릭키를 생성하고 트랜잭션을 전파하기 위해서는 키 소유자 중 최소 한명이 다른 키 소유자들의 모든 퍼블릭 키를 로컬 데이터베이스에 보유해야합니다. + +예를 들어 멀티시그 키가 `p1`, `p2`, `p3` 키로 이루어진다면, `p1` 키 보유자는 `p2`와 `p3`의 키가 있어야 멀티시그 계정의 퍼블릭 키를 생성할 수 있습니다. + +``` +gaiacli keys add \ + --pubkey=cosmospub1addwnpepqtd28uwa0yxtwal5223qqr5aqf5y57tc7kk7z8qd4zplrdlk5ez5kdnlrj4 \ + p2 + gaiacli keys add \ + --pubkey=cosmospub1addwnpepqgj04jpm9wrdml5qnss9kjxkmxzywuklnkj0g3a3f8l5wx9z4ennz84ym5t \ + p3 + gaiacli keys add \ + --multisig-threshold=2 + --multisig=p1,p2,p3 + p1p2p3 +``` + +이제 새로운 멀티시그 키 `p1p2p3`이 보관되었으며 이 주소를 기반으로 멀티 트랜잭션이 서명됩니다: + +```bash +gaiacli keys show --address p1p2p3 +``` + +위 주소를 기반으로 멀티시그 트랜잭션을 생성하는 과정의 첫 단계는 다음과 같습니다: + +```bash +gaiacli tx send cosmos1570v2fq3twt0f0x02vhxpuzc9jc4yl30q2qned 10stake \ + --from=<multisig_address> \ + --generate-only > unsignedTx.json +``` + +`unsignedTx.json` 파일은 서명되지 않은 트랜잭션을 JSON 형태로 보관합니다. 이제 `p1`은 본인의 프라이빗 키를 사용해 트랜잭션을 서명할 수 있습니다: + +```bash +gaiacli tx sign \ + --multisig=<multisig_address> \ + --name=p1 \ + --output-document=p1signature.json \ + unsignedTx.json +``` + +서명이 생성된 후, `p1`은 `unsignedTx.json`과 `p1signature.json`을 `p2` 또는 `p3`에게 전다합니다. `p2`와 `p3`은 이를 기반으로 서명을 진행합니다: + +```bash +gaiacli tx sign \ + --multisig=<multisig_address> \ + --name=p2 \ + --output-document=p2signature.json \ + unsignedTx.json +``` + +`p1p2p3`은 3명 중 2명의 서명을 필요로 하는 멀티시그 키입니다. 그렇기 때문에 `p1`이 서명한 트랜잭션에 하나의 프라이빗 키만 더해지면 트랜잭션이 유효합니다. 이제 다른 키 보유자들은 필요한 서명 파일을 결합하여 멀티시그 트랜잭션을 생성할 수 있습니다: + +```bash +gaiacli tx multisign \ + unsignedTx.json \ + p1p2p3 \ + p1signature.json p2signature.json > signedTx.json +``` + +서명된 트랜잭션은 다음과 같은 명령을 실행하여 노드에 전파합니다: + +```bash +gaiacli tx broadcast signedTx.json +``` + +## Shell 완료 스크립트 + +흔히 사용되는 `Bash`와 `Zsh` 같은 UNIX의 완료 스크립트(completion script)는 `completion` 명령어를 사용해 생성될 수 있습니다. 이 명령은 `gaiad`와 `gaiacli`에서 사용 가능합니다. + +`Bash` 완료 스크립트를 생성하기 위해서는 다음 명령어를 실행하세요: + +```bash +gaiad completion > gaiad_completion +gaiacli completion > gaiacli_completion +``` + +`Zsh` 완료 스크립트를 생성하기 위해서는 다음 명령어를 실행하세요: + +```bash +gaiad completion --zsh > gaiad_completion +gaiacli completion --zsh > gaiacli_completion +``` + +::: tip 참고 +대다수의 UNIX 시스템에서는 이런 스크립트를 `.bashrc` 또는 `.bash_profile`을 사용해 로딩할 수 있습니다: + +```bash +echo '. gaiad_completion' >> ~/.bashrc +echo '. gaiacli_completion' >> ~/.bashrc +``` + +셸 자동 완성을 사용하시려면 사용하시는 OS의 매뉴얼을 참고하십시오. +::: diff --git a/docs/translations/kr/gaia/genesis.md b/docs/translations/kr/gaia/genesis.md new file mode 100644 index 0000000000..7dd9384f5d --- /dev/null +++ b/docs/translations/kr/gaia/genesis.md @@ -0,0 +1,47 @@ +# Gaia 제네시스 스테이트 + +Gaia의 제네시스 스테이트인 `GenesisState`는 계정 정보, 모듈 스테이트 그리고 제네시스 트랜잭션 같은 메타데이터 등으로 구성됩니다. 각 모듈은 각자의 `GenesisState`를 지정할 수 있습니다. 또한, 각 모듈은 각자의 제네시스 스테이트 검증, 임포트, 엑스포트 기능 등을 지정할 수 있습니다. + +Gaia 제네시스 스테이트는 다음과 같이 정의됩니다: + +```go +type GenesisState struct { + Accounts []GenesisAccount `json:"accounts"` + AuthData auth.GenesisState `json:"auth"` + BankData bank.GenesisState `json:"bank"` + StakingData staking.GenesisState `json:"staking"` + MintData mint.GenesisState `json:"mint"` + DistrData distr.GenesisState `json:"distr"` + GovData gov.GenesisState `json:"gov"` + SlashingData slashing.GenesisState `json:"slashing"` + GenTxs []json.RawMessage `json:"gentxs"` +} +``` + +ABCI `initChainer`에서는 Gaia의 `initFromGenesisState`를 기반으로 각 모듈의 `InitGenesis`를 호출해 각 모듈들의 `GenesisState`를 파라미터 값으로 불러옵니다. + +## 계정 + +`GenesisState`에서 제네시스 계정은 다음과 같이 정의됩니다: + +```go +type GenesisAccount struct { + Address sdk.AccAddress `json:"address"` + Coins sdk.Coins `json:"coins"` + Sequence uint64 `json:"sequence_number"` + AccountNumber uint64 `json:"account_number"` + + // vesting account fields + OriginalVesting sdk.Coins `json:"original_vesting"` // total vesting coins upon initialization + DelegatedFree sdk.Coins `json:"delegated_free"` // delegated vested coins at time of delegation + DelegatedVesting sdk.Coins `json:"delegated_vesting"` // delegated vesting coins at time of delegation + StartTime int64 `json:"start_time"` // vesting start time (UNIX Epoch time) + EndTime int64 `json:"end_time"` // vesting end time (UNIX Epoch time) +} +``` + +각 계정은 시퀀스 수(sequence number (nonce))와 주소 외에도 유효한 고유 계정 번호를 보유해야 합니다. + +만약 계정이 베스팅 계정인 경우, 필수 베스팅 정보가 제공되어야 합니다. 베스팅 계정은 최소 `OriginalVestin` 값과 `EndTime` 값이 정의되어야 합니다. 먄약 `StartTime`이 함께 정의된 경우, 계정은 "연속되는(continuous)" 베스팅 계정으로 처리되며, 지정된 스케줄 안에서 꾸준히 토큰을 언락합니다. 여기에서 `StartTime`의 값은 `EndTime`의 값 보다 작아야 하지만, `StartTime`의 값은 미래 값으로 지정할 수는 있습니다 (제네시스 시간과 동일하지 않아도 괜찮습니다). 새로운 스테이트(엑스포트 되지 않은 스테이트)에서 시작하는 체인의 경우, `OriginalVestin`의 값은 `Coins`의 값과 동일하거나 적어야 합니다. + +<!-- TODO: Remaining modules and components in GenesisState --> \ No newline at end of file diff --git a/docs/translations/kr/gaia/installation.md b/docs/translations/kr/gaia/installation.md new file mode 100755 index 0000000000..4eba582f36 --- /dev/null +++ b/docs/translations/kr/gaia/installation.md @@ -0,0 +1,44 @@ +## Gaia 설치하기 + +이 가이드는 `gaiad`와 `gaiacli`를 엔트리포인트를 시스템에 설치하는 방법을 설명합니다. `gaiad`와 `gaiacli`가 설치된 서버를 통해 [풀노드](./join-testnet.md#run-a-full-node) 또는 [밸리데이터로](./validators/validator-setup.md)써 최신 테스트넷에 참가하실 수 있습니다. + +### Go 설치하기 + +공식 [Go 문서](https://golang.org/doc/install)를 따라서 `go`를 설치하십시오. `$GOPATH`, `$GOBIN`, 그리고 `$PATH`의 환경을 꼭 세팅하세요. 예시: + +```bash +mkdir -p $HOME/go/b4n +echo "export GOPATH=$HOME/go" >> ~/.bash_profile +echo "export GOBIN=$GOPATH/bin" >> ~/.bash_profile +echo "export PATH=$PATH:$GOBIN" >> ~/.bash_profile +``` + +::: tip +코스모스 SDK를 운영하기 위해서는 **Go 1.11.ㅎ+** 이상 버전이 필요합니다. +::: + +### 바이너리 설치하기 + +다음은 최신 Gaia 버전을 설치하는 것입니다. 예시에서는 최신 스테이블 릴리즈가 포함되어있는 `master` 브랜치를 이용해 진행됩니다. 필요에 따라 `git checkout`을 통해 [최신 릴리즈](https://github.com/cosmos/cosmos-sdk/releases)가 설치되어있는지 확인하세요. + +```bash +mkdir -p $GOPATH/src/github.com/cosmos +cd $GOPATH/src/github.com/cosmos +git clone https://github.com/cosmos/cosmos-sdk +cd cosmos-sdk && git checkout master +make tools install +``` + +> *참고*: 여기에서 문제가 발생한다면, Go의 최신 스테이블 버전이 설치되어있는지 확인하십시오. + +위 절차를 따라하시면 `gaiad`와 `gaiacli` 바이너리가 설치될 것입니다. 설치가 잘 되어있는지 확인하십시오: + + +```bash +$ gaiad version +$ gaiacli version +``` + +### 다음 절차 + +축하합니다! 이제 [퍼블릭 테스트넷](./join-testnet.md)에 참가하시거나 or [프라이빗 테스트넷](./deploy-testnet.md)을 운영하실 수 있습니다. diff --git a/docs/translations/kr/gaia/join-testnet.md b/docs/translations/kr/gaia/join-testnet.md new file mode 100755 index 0000000000..351bf8fc9e --- /dev/null +++ b/docs/translations/kr/gaia/join-testnet.md @@ -0,0 +1,157 @@ +# 최신 퍼블릭 테스트넷에 참가하기 + +::: tip 최신 테스트넷 +최신 테스트넷에 대한 정보는 다음의 [테스트넷 리포](https://github.com/cosmos/testnets)를 참고하세요. 어떤 코스모스 SDK 버전과 제네시스 파일에 대한 정보가 포합되어있습니다. +::: + +::: warning +**여기에서 더 진행하시기 전에 [gaia](./installation.md)가 꼭 설치되어있어야 합니다.** +::: + +## 새로운 노드 세팅하기 + +> 참고: 과거 테스트넷에서 풀 노드를 운영하셨다면 이 항목은 건너뛰시고 [과거 테스트넷에서 업그레이드 하기](#upgrading-from-previous-testnet)를 참고하세요. + +다음 절차는 새로운 풀노드를 처음부터 세팅하는 절차입니다. + +우선 노드를 실행하고 필요한 config 파일을 생성합니다: + +```bash +gaiad init --moniker <your_custom_moniker> +``` + +::: warning 참고 +`--moniker`는 ASCII 캐릭터만을 지원합니다. Unicode 캐릭터를 이용하는 경우 노드 접근이 불가능할 수 있으니 참고하세요. +::: + +`moniker`는 `~/.gaiad/config/config.toml` 파일을 통해 추후에 변경이 가능합니다: + +```toml +# A custom human readable name for this node +moniker = "<your_custom_moniker>" +``` + +최소 수수료보다 낮은 트랜잭션을 거절하는 스팸 방지 메커니즘을 활성화 하시려면 `~/.gaiad/config/gaiad.toml` 파일을 변경하시면 됩니다: + +``` +# This is a TOML config file. +# For more information, see https://github.com/toml-lang/toml + +##### main base config options ##### + +# Validators reject any tx from the mempool with less than the minimum fee per gas. +minimum_fees = "" +``` + + +당신의 풀노드가 활성화 되었습니다! [제네시스와 시드](#genesis-seeds)로 넘어가주세요. + +## 과거 테스트넷에서 업그레이드 하기 + +다음은 과거 테스트넷에서 운영을 했었던 풀노드가 최신 테스트넷으로 업그레이드를 하기 위한 절차입니다. + +### 데이터 리셋 + +우선, 과거 파일을 삭제하고 데이터를 리셋합니다. + +```bash +rm $HOME/.gaiad/config/addrbook.json $HOME/.gaiad/config/genesis.json +gaiad unsafe-reset-all +``` + +이제 `priv_validator.json`과 `config.toml`을 제외하고 노드가 초기화 되었습니다. 만약 해당 노드에 연결된적이 있는 센트리노드나 풀노드가 같이 업그레이드 되지 않았다면 연결이 실패할 수 있습니다. + +::: danger 경고 +각 노드가 **고유한** `priv_validator.json`을 보유하고 있는 것을 확인하세요. 오래된 노드의 `priv_validator.json`을 다수의 새로운 노드로 복사하지 마세요. 동일한 `priv_validator.json`을 보유한 두개 이상의 노드가 동시에 운영될 경우, **더블 사이닝**이 일어날 수 있습니다. +::: + +### 소프트웨어 업그레이드 + +이제 소프트웨어를 업그레이드할 시간입니다: + +```bash +cd $GOPATH/src/github.com/cosmos/cosmos-sdk +git fetch --all && git checkout master +make update_tools install +``` + +::: tip +*참고*: 이 단계에서 문제가 있으시다면 최신 스테이블 GO 버전이 설치되어있는지 확인해주세요. +::: + +위 예시에서는 가장 최신 스테이블 릴리즈가 있는 `master`를 사용합니다. 테스트넷마다 운용하는 릴리즈가 다를 경우가 있으니 [testnet repo](https://github.com/cosmos/testnets)를 확인하셔서 어떤 버전이 필요한지 확인하시고, [SDK 릴리즈 페이지](https://github.com/cosmos/cosmos-sdk/releases)에서 각 릴리즈에 대한 정보를 확인하세요. + +이제 풀 노드가 깔끔하게 업그레이드 되었습니다! + +## 제네시스와 시드 + +### 제네시스 파일 복사하기 + +테스트넷의 `genesis.json`파일을 `gaiad`의 config 디렉토리로 가져옵니다. + +```bash +mkdir -p $HOME/.gaiad/config +curl https://raw.githubusercontent.com/cosmos/testnets/master/latest/genesis.json > $HOME/.gaiad/config/genesis.json +``` + +위 예시에서는 최신 테스트넷에 대한 정보가 포함되어있는 [테스트넷 repo]의 `latest`를 이용하는 것을 참고하세요. 만약 다른 테스트넷에 연결하신다면 해당 테스트넷의 파일을 가져오는 것인지 확인하세요. + +설정이 올바르게 작동하는지 확인하기 위해서는 다음을 실행하세요: + +```bash +gaiad start +``` + +### 시드 노드 추가하기 + +이제 노드가 다른 피어들을 찾는 방법을 알아야합니다. `$HOME/.gaiad/config/config.toml`에 안정적인 시드 노드들을 추가할 차례입니다. `testnets` repo에 각 테스트넷에 대한 시드 노드 링크가 포함되어있습니다. 만약 현재 운영되고 있는 테스트넷을 참가하고 싶으시다면 [여기](https://github.com/cosmos/testnets)에서 어떤 노드를 이용할지 확인하세요. + +만약 해당 시드가 작동하지 않는다면, 추가적인 시드와 피어들을 [코스모스 익스플로러](https://explorer.cosmos.network/nodes)를 통해 확인하실 수 있습니다. `Full Nodes` 탭을 들어가셔서 프라이빗(`10.x.x.x`) 또는 로컬 IP 주소(https://en.wikipedia.org/wiki/Private_network)가 *아닌* 노드를 열어보세요. `Persistent Peer` 값에 연결 스트링(connection string)이 표기되어 있습니다. 가장 최적화된 결과를 위해서는 4-6을 이용하세요. + +이 외에도 [밸리데이터 라이엇 채팅방](https://riot.im/app/#/room/#cosmos-validators:matrix.org)을 통해서 피어 요청을 할 수 있습니다. + +시드와 피어에 대한 더 많은 정보를 원하시면 [여기](https://github.com/tendermint/tendermint/blob/develop/docs/tendermint-core/using-tendermint.md#peers)를 확인하세요. + +## 풀노드 운영하기 + +다음 커맨드로 풀노드를 시작하세요: + +```bash +gaiad start +``` + +모든 것이 잘 작동하고 있는지 확인하기 위해서는: + +```bash +gaiacli status +``` + +네트워크 상태를 [코스모스 익스플로러](https://explorecosmos.network)를 통해 확인하세요. 현재 풀 노드가 현재 블록높이로 싱크되었을 경우, 익스플로러의 [풀 노드 리스트](https://explorecosmos.network/validators)에 표시가 될 것입니다. 익스플로러가 모든 노드에 연결하지는 않아 표시가 되지 않을 수 있다는 점 참고해주십시오. + +## 상태 내보내기(Export State) + +Gaia는 현재 애플리케이션의 상태를 JSON파일 형태로 내보낼 수 있습니다. 이런 데이터는 수동 분석과 새로운 네트워크의 제네시스 파일로 이용될 때 유용할 수 있습니다. + +현재 상태를 내보내기 위해서는: + +```bash +gaiad export > [filename].json +``` + +특정 블록 높이의 상태를 내보낼 수 있습니다(해당 블록 처리 후 상태): + +```bash +gaiad export --height [height] > [filename].json +``` + +만약 해당 상태를 기반으로 새로운 네트워크를 시작하시려 한다면, `--for-zero-height` 플래그를 이용하셔서 내보내기를 실행해주세요: + +```bash +gaiad export --height [height] --for-zero-height > [filename].json +``` + +## 밸리데이터 노드로 업그레이드 하기 + +이제 풀노드가 활성화 되었습니다! 다음은 무엇일까요? + +이제는 해당 풀노드를 업그레이드 하여 코스모스 밸리데이터가 될 수 있습니다. 상위 100개 밸리데이터는 코스모스 허브의 블록 생성과 제안을 할 수 있습니다. 밸리데이터 노드로 업그레이드 하시기 위해서는 [밸리데이터 설정하기](./validators/validator-setup.md) 항목으로 넘어가주세요. diff --git a/docs/translations/kr/gaia/keys.md b/docs/translations/kr/gaia/keys.md new file mode 100755 index 0000000000..ed1eecb09f --- /dev/null +++ b/docs/translations/kr/gaia/keys.md @@ -0,0 +1,9 @@ +# 키 + +키 관리에 대해서는 [텐더민트 스펙](https://github.com/tendermint/tendermint/blob/master/docs/spec/blockchain/encoding.md#public-key-cryptography)을 확인하세요. + +`gaiacli keys --help` 명령어를 통해 추가 정보를 얻으실 수 있습니다. + +[테스트넷 투토리얼](https://github.com/cosmos/cosmos-sdk/tree/develop/cmd/gaia/testnets)에서 관련 정보를 확인하실 수 있습니다. + +참고: 이 문서는 현재 작업중에 있습니다. diff --git a/docs/translations/kr/gaia/ledger.md b/docs/translations/kr/gaia/ledger.md new file mode 100755 index 0000000000..14ee88f5ec --- /dev/null +++ b/docs/translations/kr/gaia/ledger.md @@ -0,0 +1,30 @@ +# 레저(Ledger) 나노 하드웨어 지갑 지원 + +### 레저 시드를 이용한 계정 키 관리 + +이제 `gaiacli` 가 레저(Ledger) 시드를 통한 계정 키 관리를 지원합니다. 해당 기능을 이용하시기 위해서는 다음이 필요합니다: + +- 이용하실 네트워크와 연결된 `gaiad` 인스턴스. +- 사용하시는 `gaiad` 인스턴스와 연동된 `gaiacli` 인스턴스. +- `ledger-cosmos` 앱이 설치된 레저 나노 기기. + * 레저 기기에 코스모스 앱을 설치하기 위해서는 [`ledger-cosmos`](https://github.com/cosmos/ledger-cosmos/blob/master/docs/BUILD.md) 깃허브 레포지토리를 확인하세요. + * 실전 운용 가능한 앱 버전은 추후 [레저 앱스토어](https://www.ledgerwallet.com/apps)를 통해 배포될 예정입니다. + +> **참고:** 코스모스 키는 [BIP 44 Hierarchical Deterministic wallet 스펙](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki)에 파생되었습니다. 관련 패스에 대한 정보는 [hd package](https://github.com/cosmos/cosmos-sdk/blob/develop/crypto/keys/hd/hdpath.go#L30)를 참고하세요. + +코스모스 앱을 레저 기기에 성공적으로 설치하시고, `gaiacli` 에서 레저와 연결하는데 성공하셨다면 다음과 같이 레저 키를 생성하실 수 있습니다: + +```bash +$ gaiacli keys add {{ .Key.Name }} --ledger +NAME: TYPE: ADDRESS: PUBKEY: +{{ .Key.Name }} ledger cosmos1aw64xxr80lwqqdk8u2xhlrkxqaxamkr3e2g943 cosmospub1addwnpepqvhs678gh9aqrjc2tg2vezw86csnvgzqq530ujkunt5tkuc7lhjkz5mj629 +``` + +이 키는 레저가 연결되고 잠금 해제된 상태에서면 사용이 가능합니다. 해당 키를 이용해 코인을 전송하시려면 다음 명령을 실행하세요: + + +```bash +$ gaiacli tx send { .Destination.AccAddr } 10stake --from { .Key.Name } --chain-id=gaia-7000 +``` + +레저 기기에서 해당 트랜잭션을 검토하신 후 서명이 되었다면 트랜잭션 결과를 레저 기기에서 확인하실 수 있습니다. diff --git a/docs/translations/kr/gaia/validators/overview.md b/docs/translations/kr/gaia/validators/overview.md new file mode 100755 index 0000000000..15dfa27eb2 --- /dev/null +++ b/docs/translations/kr/gaia/validators/overview.md @@ -0,0 +1,34 @@ +# 검증인(밸리데이터) 개요 + +## 소개 + +[코스모스 허브](/introduction/cosmos-hub.md)는 [텐더민트](/introduction/tendermint.md) 기반으로 만들어졌으며 특정 검증인들이 블록체인에 새로운 블록을 기록하는 절차를 기반으로 설계되었습니다. 검증인들은 각 검증인들의 프라이빗키로 서명된 암호화된 표(votes)를 전파하면서 합의 프로토콜에 참여합니다. + +검증인 후보는 본인들의 아톰을 자체적으로 위임하거나, 위임자들의 아톰을 위임받을 수 있습니다. 코스모스 허브는 100개의 검증인으로 시작하여 300개의 검증인으로 숫자를 늘려나갈 예정입니다. 검증인은 위임량에 따라서 정해지며, 상위 100위 검증인은 코스모스 검증인으로 선출됩니다. + +검증인들과 위임자들은 텐더민트 합의 프로토콜에 참여하며 블록생성에 대한 보상을 지급받게 됩니다. 초기에 트랜잭션 수수료는 아톰으로 결제되지만, 거버넌스로 통과된 '화이트리스트 토큰'들이 수수료 토큰으로 이용될 수 있습니다. 추가적으로 검증인들은 본인의 검증인 서비스 제공에 대한 커미션을 측정할 수 있습니다. + +만약 검증인이 이중서명(double sign)을 하거나, 자주 오프라인 되거나 또는 거버넌스에 참여하지 않는 경우, 그들의 아톰과 해당 검증인에게 위임된 아톰은 '슬래싱'당할 수 있습니다. 슬래싱 페널티는 악의적 행동의 중대성에 따라 비례합니다. + +## 하드웨어 + +현재 검증인의 키 관리에 적합한 클라우드 솔루션은 없습니다. 앞으로 클라우드 SGX 도입이 되면서 조금 더 안전한 솔루션이 제공될 수 있을 것으로 기대되고 있습니다. 하지만 현재로써 클라우드 키 관리에 리스크가 있기 때문에 검증인들은 제한된 안전한 구역에 장비를 세팅하는 것을 추천합니다. 보안이 확보되는 특정 데이터 센터의 코로케이션(co-location) 같은 형태로 운영이 될 수 있습니다. + +검증인들은 서버 장비가 운영되는 데이터센터에 스토리지 백업, 복수 회선, 그리고 전력 백업 등의 시스템이 갖춰져 있는 것을 확인해야 합니다. 광선, 방화벽, 스위칭 등 또한 중복되어있는 것을 추천드립니다. 하드웨어 성능에는 중저형 서버로 시작해도 충분할 것으로 예상되나, 충분한 검증과 테스팅을 실행하시는 것을 추천드립니다. + +코스모스 생태계 초기의 네트워크 사용량은 크지 않을 것으로 예상되며, 현재 테스트넷은 대량의 리소스를 필요로 하지 않습니다. 하지만 네트워크가 성장하며 대역폭, CPU와 메모리 사용량이 높아질 것으로 예상됩니다. 추가적으로, 몇년의 블록체인 기록을 저장해야되기 때문에 대용량 하드드라이브를 이용하시는 것을 추천드립니다. + +## 웹사이트 세팅하기 + +검증인의 고유 웹사이트를 만드시고, 코스모스 [포럼](https://forum.cosmos.network/t/validator-candidates-websites/127/3)을 통해서 검증인 참여 의사를 알려주십시오. 위임인들은 위임 대상 검증인에 대한 정보를 확인하려 할 수 있으니, 관련 정보를 기제해주시기 바랍니다. + +## 법적 검토 + +검증인 사업을 운영하시기 전에 전문 법적 검토를 미리 받으실 것을 추천드립니다. + +## 검증인 커뮤니티 + +추가적으로 검증인을 운영하는 것에 대한 질문과 정보는 검증인 커뮤니티 채팅방과 포럼을 이용하세요: + +* [검증인 채팅](https://riot.im/app/#/room/#cosmos_validators:matrix.org) +* [검증인 포럼](https://forum.cosmos.network/c/validating) diff --git a/docs/translations/kr/gaia/validators/security.md b/docs/translations/kr/gaia/validators/security.md new file mode 100755 index 0000000000..14085db2fa --- /dev/null +++ b/docs/translations/kr/gaia/validators/security.md @@ -0,0 +1,54 @@ +## 검증인 보안 + +검증인 세팅의 다양성이 네트워크 전체의 탄력성을 증가하기 때문에 각 검증인은 각자 독립적인 형태로 노드를 운영하는 것을 추천합니다. 메인넷을 대비하기 위해서 지금 부터 노드 운영을 시작하실 것을 추천합니다. + +## 키 관리 - HSM + +안전한 노드 운영의 기초는 공격자가 검증인의 프라이빗키를 탈취할 수 없게 하는 것입니다. 만약 이 것이 가능하다면, 키가 탈취된 모든 위임된 코인은 위험에 처해질 수 있습니다. 이런 리스크를 줄이기 위한 가장 좋은 방법은 하드웨어 보안 모듈(HSM, Hardware Security Module)을 이용하는 것입니다. + +코스모스 허브에서 HSM을 사용하시는 경우, 해당 모듈은 `ed25519` 서명을 지원해야 합니다. YubiHSM2는 `ed25519`를 지원하며 이에 대한 어답터 라이브러리(adapter library)는 추후 지원할 계획입니다. YubiHSM은 프라이빗 키 탈취에 대한 보안을 지원하지만, 동일한 블록을 두번 서명하는 것에 대한 안전성은 제공하지 않는다는 것에 유의하시기 바랍니다. + +이 외에도 텐더민트 팀은 현재 검증인 서명을 위한 Ledger Nano S 지원을 준비하고 있습니다. Ledger Nano S의 경우 최신 블록을 저장하기 떄문에 더블사인 공격을 막을 수 있을 것으로 보입니다. + +추후 솔루션들이 준비되는대로 이 페이지는 업데이트 됩니다. + +## 센트리노드 (DDOS 방어) + +검증인은 코스모스 네트워크가 일정의 서비스 거부 공격(denial of service) 공격을 감내할 수 있도록 해야 합니다. + +이런 공격을 방어할 방법 중 하나는 검증인이 본인의 네트워크를 '센트리노드 아키텍쳐' 형태로 구성하는 것입니다. + +검증인은 신뢰할 수 있는 풀노드에만 연결해야 합니다. 이는 본인이 직접 운영하는 노드 또는 사회적으로(개인적으로) 아는 검증인들이 운영하는 풀노드 등이 포함될 수 있습니다. 대다수의 검증인 노드는 데이터센터에서 운영됩니다. 대다수의 데이터센터는 다른 주요 클라우드 서비스 제공자와 직접적인 링크를 제공합니다. 검증인들은 이런 링크를 통해서 클라우드 기반 센트리를 연결할 수 있습니다. 이런 형태의 아키텍쳐는 DDoS 공격의 부담을 검증 노드에서 센트리노드로 우회시키기 때문에 상황에 따라 추가적인 센트리노드를 운영해야될 수 있습니다. + +센트리노드는 빠르게 추가될 수 있으며 상황에 따라 IP 주소를 변경할 수 있습니다. 센트리노드와 검증인 노드 간의 연결은 프라이빗 IP를 통해 이루어지기 때문에, 인터넷 기반 공격의 피해를 줄일 수 있습니다. 이런 형태의 디자인은 검증인의 블록 제안과 투표가 언제나 네트워크에 전달될 수 있게 합니다. + +센트리노드 아키텍쳐를 세팅하시기 위해서는 다음 절차를 참고하십시오: + +검증인 노드는 해당 노드의 `config.toml`을 수정해야 합니다: + +```bash +# Comma separated list of nodes to keep persistent connections to +# Do not add private peers to this list if you don't want them advertised +persistent_peers =[list of sentry nodes] + +# Set true to enable the peer-exchange reactor +pex = false +``` + +센트리노드 또한 해당 노드의 `config.toml` 파일을 수정해야 합니다: + +```bash +# Comma separated list of peer IDs to keep private (will not be gossiped to other peers) +private_peer_ids = "ipaddress of validator nodes" +``` + +## 환경 변수 + +기본적으로 다음 프리픽스(prefix)의 대문자 환경 변수(environment variables)는 소문자 커맨드라인 플래그를 대체하게 됩니다: + +- `GA` (for Gaia 플래그) +- `TM` (for Tendermint 플래그) +- `BC` (for democli 또는 basecli 플래그) + +예를들어 `GA_CHAIN_ID` 환경 변수는 `--chain-id` 커맨드라인 플래그에 매핑됩니다. 명백한(explicit) 커맨드라인 플래그는 환경 변수 보다 상위에 속하며, 환경 변수는 모든 설정 파일 보다 상위에 속합니다. 중요한 파라미터는 CLI의 플래그로 정의되어야 하며 환경 변수의 수정 가능성을 줄이는 것이 중요합니다. + diff --git a/docs/translations/kr/gaia/validators/validator-faq.md b/docs/translations/kr/gaia/validators/validator-faq.md new file mode 100755 index 0000000000..783e275dc4 --- /dev/null +++ b/docs/translations/kr/gaia/validators/validator-faq.md @@ -0,0 +1,308 @@ +# 검증인 FAQ + +::: warning 경고 +코스모스 프로젝트는 현재 진행형입니다. 메커니즘과 값은 추후 변경될 수 있다는 점을 확인하십시오. +::: + +## 기본 개념 + +### 검증인이란 무엇인가? + +[코스모스 허브](/introduction/cosmos-hub.md)는 [텐더민트](/introduction/tendermint.md) 기반으로 특정 [검증인](/validators/overview.md) 들이 네트워크의 보안을 지키는 허브입니다. 검증인들은 풀노드를 운영하며 본인의 프라이빗키로 서명된 암호화된 서명으로 투표를 하며, 이 표를 네트워크에 전파하여 합의 절차에 참여하게 됩니다. 검증인들은 새로운 블록은 블록체인에 기록하고, 이런 역할에 대한 보상을 받게됩니다. 또한 검증인은 프로포절에 대한 투표를 하며 거버넌스 절차에 참여합니다. 검증인들의 순위는 위임 받은 코인 수량에 따라서 정해집니다. + +### '스테이킹'은 무엇인가? + +코스모스 허브는 퍼블릭 지분증명 블록체인입니다. 이는 각 검증인들의 순위가 각자가 위임받아 본딩된 스테이킹 토큰(아톰)의 수량에 따라 순위가 정해진다는 것입니다. 검증인은 스테이킹은 검증인 자체 물량 또는 위임자가 위임한 토큰이 될 수 있습니다. + +검증인이 될 의사가 있는 유저는 누구나 `create-validator` 트랜잭션을 발생시켜 의사를 표시하고 검증인이 될 수 있습니다. + +(스테이킹 수량으로 결정되는) 검증인의 가중치(weight)는 해당 검증인이 실제 블록 생성에 참여할 수 있는지를 결정하며, 얼마나 자주 블록은 제안할 수 있는지와 얼마나 많은 보상을 가저가는지에 영향을 끼칩니다. 초기에는 가중치가 높은 100개의 검증인들이 실제 블록생성에 참여합니다. 만약 검증인이 이중서명을 하거나, 자주 오프라인 상태로 전환되거나, 거버넌스 절차에 참여하지 않을경우 위임된 모든 아톰(자체물량과 위임 받은 물량 포함)은 '슬래싱'되어 사라지게 됩니다. + +### 풀노드는 무엇인가? + +풀노드는 블록의 블록과 트랜잭션을 검증하는 프로그램입니다. 라이트노드와의 차이점은 라이트노드의 경우 블록헤더와 일부 소량의 트랜잭션을 처리하지만, 풀노드는 모든 거래와 모든 기록을 저장하고 검증합니다. 풀노드를 운영하기 위해서는 라이트노드보다 많은 리소스가 필요하지만, 검증인을 운영하기 위해서는 필수적입니다. 실질적으로 풀노드를 운영한다는 것은 최신 버전과 안전성이 확보된 소프트웨어를 다운타임과 네트워크 지연없이 운영하는 것입니다. + +검증인을 운영할 의사가 없는 유저들도 풀노드를 운영할 수 있습니다. + +### 위임인은 무엇인가? + +위임자/위임인은 아톰을 보유하고 있지만 검증인을 운영할 수 없거나, 운영할 의사가 없는 유저입니다. 위임인은 [코스모스 보이저][Cosmos Voyager](/getting-started/voyager.md) 또는 다른 지갑을 통해 본인의 아톰을 검증인에게 위임하여 검증인 보상의 일부를 돌려받을 수 있습니다(보상 분배에 대한 자세한 정보는 **스테이킹의 인센티브**와 **검증인 커미션은 무엇인가?** 항목을 확인하십시오). + +위임인은 검증인들과 보상을 나누기 때문에, 위임인에게도 책임이 주어집니다. 만약 검증인이 악의적인 행동을 한다면 위임인들의 토큰 또한 함께 슬래싱될 수 있습니다. 그렇기 때문에 위임인들은 위임을 하기 전 충분한 검토와 조사를 실시한 후 위임을 해야하며, 다수의 검증인에게 분산위임하는 방법을 추천합니다. + +위임인들은 코스모스 네트워크를 운영하는 검증인들을 선택하는 역할을 하기 때문에네 네트워크의 핵심적인 역할을 하는 유저입니다. 위임인은 수동적인 역할을 하는 유저가 아닙니다. 활발하게 검증인들의 활동과 행동을 모니터링하고 그들의 거버넌스 참여 투표 등을 자주 확인해야할 필요가 있습니다. + +## 검증인 되기 + +### 어떻게 검증인이 되는가? + +네트워크에 참여하는 모든 유저는 `create-validator` 트랜잭션을 통해 본인이 검증인이 될 의사를 표시할 수 있습니다. 해당 트랜잭션에는 다음과 같은 값이 포함되어야 합니다: + +* 검증인의 PubKey: PubKey와 연관된 프라이빗키는 _prevote_ 와 _precommit_ 을 서명하는데 사용됩니다. 이런 방식을 통해서 검증인은 유동적 자금이 있는 계정과 검증용 계정을 따로 관리할 수 있습니다. +* 검증인 주소: 애플리케이션 단 주소입니다. 이 주소는 공개적으로 검증인의 신원을 확인할때 이용됩니다. 해당 주소와 연관되어있는 프라이빗키는 본딩, 언본딩, 보상 수령, 거버넌스 참여 등에서 이용됩니다. +* 검증인 이름(moniker) +* 검증인 웹사이트(선택 사항) +* 검증인 설명(선택 사항) +* 최초 커미션: 블록 검증으로 받는 보상에서 위임인들 지불되기 전 삭감되는 수수료 +* 최대 커미션: 해당 검증인이 설정한 최대 수수료 +* 최소 셀프본딩 수량: 검증인이 최소로 본딩해야 하는 아톰의 수량. 만약 해당 검증인의 총 위임 수량이 이 값보다 떨어지는 경우, 스테이킹 풀 전체는 언본딩 됩니다. +* 최초 셀프본딩 수량: 최초로 검증인이 자체 스테이킹 하는 수량. + +이제 검증인이 만들어지면, 위임인들은 해당 검증인에게 아톰을 위임하며 해당 스테이킹 풀의 수량을 늘려갈 수 있습니다. 특정 주소의 총 스테이크는 자체 스테이킹 물량 + 위임 받은 스테이킹 물량입니다. + +검증인으로 참가할 의사를 밝힌 모든 검증인 중 스테이킹 수량이 가장 많은 상위 100개의 검증인은 '활성화된 검증인'으로 블록생성에 참여할 수 있게 됩니다. 상위 100 순위 밖으로 나가게 되는 검증인은 **bonded 검증인**이 되며 검증인 권한을 일게됩니다. 이때 해당 검증인의 물량은 **언본딩 모드**로 들어가면서 서서히 **언본딩** 됩니다. + +코스모스 허브의 검증인 수는 시간이 지날수록 다음과 같이 인상될 예정입니다: + +* **0년차:** 100 +* **1년차:** 113 +* **2년차:** 127 +* **3년차:** 144 +* **4년차:** 163 +* **5년차:** 184 +* **6년차:** 208 +* **7년차:** 235 +* **8년차:** 265 +* **9년차:** 300 +* **10년차:** 300 + +## 테스트넷 + +### 어떻게 테스트넷에 참여할 수 있나요? + +테스트넷은 로치 전에 검증인 세팅을 확인할 수 있는 좋은 환경입니다. 테스트넷에 참가함으로 본인이 검증인 운영을 위해 준비해왔다는 것을 보여주는 기회가 될 수도 있습니다. 테스트넷에 관련된 정보는 [여기](https://github.com/cosmos/cosmos-sdk/tree/develop/cmd/gaia/testnets) 와 [여기](https://github.com/cosmos/testnets)에서 확인하실 수 있습니다. + +### 어떤 종류들의 '키'가 있나요? + +간략하게 설명하면 두가지 종류의 키가 있습니다: + +* **텐더민트 키**: 이 키는 블록 해시를 서명할때 이용되는 고유 키입니다. 해당 키는 `cosmosvalconspub` 퍼블릭키와 연관되어 있습니다. + * gaiad init으로 노드가 생성될때 키가 생성되며 + * 해당 키 정보는 `gaiad tendermint show-validator` 명령어로 확인하실 수 있습니다. 예) `cosmosvalconspub1zcjduc3qcyj09qc03elte23zwshdx92jm6ce88fgc90rtqhjx8v0608qh5ssp0w94c` + +* **애플리케이션 키**: 이 키는 애플리케이션에 의하여 생성되고 트랜잭션을 서명할때 이용됩니다. 검증인으로써는 이 키를 스테이킹 관련 트랜잭션과 거버넌스 관련 트랜잭션을 서명할때 이용하시게 됩니다. 애플리케이션 키는 `cosmospub` 퍼블릭키와 `cosmos` 주소와 연관되어있습니다. 두 키 모두 `gaiacli keys add` 명령으로 생성됩니다. + * 참고: 특정 검증인의 운영키는 애플리케이션키와 연관이 있으나 `cosmosvaloper`와 `cosmosvaloperpub`같은 특정 용도에만 맞는 사전 정의된 prefix를 이용합니다. + +### 밸리데이터들의 '상태(state)'에는 어떤 것들이 있나요? + +`create-validator` 트랜잭션을 통해 만들어진 검증인은 총 3개의 상태가 있을 수 있습니다: + +- `bonded`: 검증인은 현재 합의에 참가하고 있는 활성화된 검증인입니다. 이 검증인은 블록 보상을 받을 수 있으며, 악의적인 행동에 대한 슬래싱 페널티를 받을 수도 있습니다. +- `unbonding`: 검증인은 현재 합의에 참가하고 있지 않으면 활성화된 검증인 세트에 포함되어있지 않습니다. 검증인은 블록 생성을 받지 않지만 악의적인 행동에 대한 슬래싱 페널티는 적용될 수 있습니다. 이 상태는 `bonded` 상태인 검증인이 `unbonded`으로 전환되는 중간 상태이며, 만약 `unbonding` 상태에서 `rebond` 트랜잭션을 발생하지 않으면 최대 3주간 중간 단계에 머무를 수 있습니다. +- `unbonded`: 검증인은 합의에 참가하고 있지 않은 검증인이며, 활성화된 검증인 세트에 포함되어있지 않습니다. 이 검증인은 블록 생성 보상을 받지 않으며 슬래싱 페널티도 적용되지도 않습니다. 이 검증인에게 아톰을 위임하는 것은 가능합니다. `unbonded` 상태인 검증인으로 부터의 언본딩은 바로 처리 됩니다. + +위임인들은 관련 검증인들과 동일한 상태를 가지게 됩니다. + +*Note that delegation are not necessarily bonded. Atoms can be delegated and bonded, delegated and unbonding, delegated and unbonded, or liquid* + + +### 셀프본딩은 무엇이며 어떻게 셀프본딩을 늘릴 수 있나요? + +### 테스트넷 토큰은 어떻게 받을 수 있나요? + +테스트넷 토큰을 받고 싶으시다면 [faucet](https://gaia.faucetcosmos.network/)을 통해서 받으실 수 있습니다. + +### 활성화된 검증인이 되기 위해서 최소 필요한 아톰 수량이 있나요? + +합의 프로세스에 참여하며 블록을 생성하는 검증인이 되기 위해서 특정 수량의 아톰이 필요하지는 않습니다. 다만, 셀프본딩 수량과 위임 받은 수량의 합이 사우이 100위에 들어야 활성화된 검증인이 되실 수 있습니다. + +### 위임인들은 어떻게 검증인들을 선택하나요? + +위임인들은 본인들이 설정한 기준에 따라 검증인을 선택할 자유가 있습니다. 검증인을 선택할때 고려해야하는 주요 사항은 다음과 같습니다: + +* **셀프본딩 수랑:** 특정 검증인이 자체 본딩한 아톰의 수량입니다. 셀프본딩 수량이 높은 검증인은 본인의 행동에 따라 잃을 수 있는 것이 많기 때문에 더 많은 책임감이 부여될 수 있습니다. +* **위임된 아톰 수량:** 해당 검증인이 위임받은 아톰의 총 수량. 높은 위임 수량은 해당 검증인에 대한 신뢰도가 높다는 것을 뜻할 수 있습니다. 다만, 대형 검증인은 책임지고 있는 물량이 많기 때문에 해커들의 타겟이 될 수 있다는 위험이 존재할 수 있습니다. 해커들은 특정 검증인이 위임하고 있는 물량의 일정 %를 보상으로 받기 때문에 해커는 대형 검증인을 타겟할 확률이 높습니다. 검증인이 위임받고 있는 아톰이 과도할 경우, 높은 위임 수량은 단점으로 적용될 수 있습니다. +* **커미션:** 해당 검증인이 생성하는 보상에 대하여 위임인들에게 청구하는 수수료입니다. +* **검증인 활동 기록:** 위임인들은 본인들의 아톰을 위임하기 전 검증인들의 활동 기록을 먼저 살펴볼 수 있습니다. 이 항목에는 활동 기간, 과거 투표 현황, 업타임 기록, 노드 공격 기록 등이 포함될 수 있습니다. + +위에 표기된 항목 외에도 검증인 정보에 포함되어있는 웹사이트를 통해서 검증인에 대한 정보를 받을 수 있습니다. 검증인 세팅에 대해 외부 감사를 받은 경우 이를 표기하는 것도 좋은 기록이 될 수 있습니다. 참고로 텐더민트 팀은 특정 검증인에 대한 감사를 진행하지 않습니다. 검증인 선택 기준에 대한 더 많은 정보는 [이 블로그 글](https://medium.com/@interchain_io/3d0faf10ce6f)에서 확인하실 수 있습니다. + +## 검증인들의 책임 + +### 검증인을 하기 위해서는 신원을 밝혀야 하나요? + +아닙니다. 각 위임인들은 본인들이 설정한 기준으로 각자 투표를 합니다. 검증인들은 홍보 용도를 위해서 본인들에 대한 정보가 표기된 웹사이트를 공개하는 것을 추천합니다. 해당 웹사이트에서 본인들의 정보를 공개할 것인지 또는 익명으로 본인들의 활동 기록만을 공개할 것인지는 검증인의 선택입니다. 코스모스 허브에는 익명의 팀과 팀 정보를 공개하는 팀이 공존할 확률이 높습니다. + +### 검증인들이 되기 위해서는 어떤 책임이 있나요? + +검증인들은 다음과 같은 책임이 있습니다: + +* **언제나 올바른 소프트웨어로 노드를 운영하기:** 검증인들은 본인들의 서버가 언제나 온라인 상태며 프라이빗키가 탈취당하지 않게 관리를 해야합니다. +* **활발하게 거버넌스에 참가하기:** 검증인들은 모든 프로포절에 투표를 해야 합니다. + +추가적으로 검증인들은 코스모스 커뮤니티에서 활동을 해야합니다. 검증인들은 생태계의 현재 상황에 대해 언제나 인지하며 혹시 있을 변화에 유연하게 대처할 수 있어야 합니다. + +### '거버넌스에 참여'한다는 것은 무슨 뜻인가요? + +코스모스 허브의 검증인들과 위임인들은 블록 가스 제한 같은 운영적 파라미터(operational parameters) 변경을 요청하거나, 소프트웨어 업그레이드를 조율하거나, 코스모스 허브에 대한 헌법을 제안할 수 있습니다. + +검증인들은 거버넌스 시스템에서 특별한 역할을 합니다. 검증인들은 코스모스 허브의 기둥으로써 모든 프로포절에 투표를 해야합니다. 이는 투표에 참가하지 않는 위임인들이 검증인들의 투표를 따르기 때문에 특히 중요합니다. 프로포절에 투표를 하지 않는 검증인에게는 슬래싱 페널티가 부여됩니다. + +### 스테이킹은 어떤 의미를 가지나요? + +아톰을 스테이킹하는 것은 검증 활동에 대한 보증금이라고 생각하시면 됩니다. 만약 특정 검증인 또는 위임인이 본인의 아톰의 전체(또는 일부)를 언본딩 하기 위해서는 언본딩 트랜잭션을 발생해야 합니다. 이후, 해당 아톰은 _3주 간의_ 언본딩 기간을 두며 검증인들의 악의적인 행동에 대해 함께 책임을 지게 됩니다. + +검증인과 해당 검증인에 위임을 한 위임인들은 블록 생성에 대한 보상, 수수료 보상, 그리고 거버넌스에 참여할 권한을 부여받습니다. 만약 특정 검증인이 악의적인 행동을 한다면 해당 검증인의 검증 권한에 있는 아톰은 슬래싱 페널티를 받을 수 있습니다. 그렇기 때문에, 위임인들은 검증인이 안정적이고 안전성을 보장할 수 있는 여부를 확인할 필요가 있습니다. + +### 검증인은 위임인들의 위임된 아톰을 탈취할 수 있나요? + +검증인에게 위임을 하는 위임인은 '스테이킹 파워(staking power)'를 위임하는 것입니다. 검증인의 스테이킹 파워가 많을수록 해당 검증인은 합의 절차와 거버넌스 절차에서 가지는 힘이 커집니다. 하지만 검증인은 위임인의 아톰의 소유권을 가지지는 앖습니다. 코스모스 허브의 설계는 검증인이 위임인들의 아톰을 탈취할 수 없게 설계되었습니다. + +검증인들은 위임인들의 자산을 직접적으로 탈취할 수 없지만, 검증인들의 악의적인 행동으로 발생하는 페널티에 대한 슬래싱은 검증인과 위임인들에게 동일하게 적용됩니다. + +### 검증인들은 얼마나 자주 블록 생성 제안을 할 수 있는건가요? 확률은 스테이킹된 아톰에 비례해서 올라가나요? + +블록체인의 다음 블록을 제안하는 검증인은 '제안자(proposer)'라고 불립니다. 각 제안자는 결정론적이게 선택되며, 제안자로 선택될 확률은 총 스테이킹 물량(셀프 본딩 스테이크 + 위임받은 스테이크)에 비례합니다. 예를들어, 모든 검증인들의 시스템상의 모든 스테이킹 수량이 100 아톰이고, 특정 검증인의 스테이킹 수량이 10아톰일 경우, 해당 검증인이 제안자로 선택될 확률은 10% 입니다. + +### 코스모스 허브의 검증인은 코스모스 생태계 내 다른 존을 검증해야될 수도 있나요? + +네, 그렇습니다. 초기에는 코스모스 허브의 검증인은 최초 이더민트 존을 검증해야합니다. 거버넌스에 의하여 결정된 경우, 코스모스 허브의 검증인은 코스모스 생태계 내의 다른 존 또한 검증해야 합니다. 검증인들은 이더민트 존과 동일하게 다른 존을 검증하는 것에 대한 블록 생성 보상과 트랜잭션 수수료를 보상으로 받을 수 있습니다. + +## 인센티브 + +### 스테이킹을 할 인센티브는 무엇이 있나요? + +특정 검증인의 스테이킹 풀의 참여자는 다수의 형태로 수익을 받을 수 있습니다: + +* **블록 생성 보상:** 검증인들이 운영하는 특정 블록체인 애플리케이션의 고유 스테이킹 토큰(예, 코스모스 허브의 아톰)은 블록 생성을 통한 인플레이션이 있습니다. 인플레이션은 아톰 부유자들이 스테이킹을 할 인센티브를 부여하기 위한 목적이 있으며, 스테이킹을 하지 않는 아톰의 가치는 시간이 지날수록 희석됩니다. +* **블록 리워드:**: 이더민트 존의 경우, 블록 생성 보상은 포톤(photon) 토큰으로 지급됩니다. 포톤은 초기에 이더리움에서 '하드 스푼(hard spoon)'을 통해 분배되며 이더리움 수량의 1:1 비율로 지급될 예정입니다(거버넌스에 따라 해당 사항은 변경될 수 있습니다). +* **트랜잭션 수수료:** 코스모스 허브는 트랜잭션 수수료로 지불이 가능한 토큰들의 화이트리스트를 관리합니다. + +위에 나열된 보상과 수수료로 발생하는 수익은 각 검증인의 총 스테이킹 물량에 비례하여 지급되며, 각 검증인 풀에 위임한 위임인들은 이 수익을 분배받습니다. 보상 수익은 각 검증인의 커미션을 차감한 후 지급된다는 점을 참고하시기 바랍니다. + +### 검증인을 운영할 인센티브는 무엇이 있나요? + +검증인은 커미션을 통해서 위임인들 보다 많은 보상을 받을 수 있습니다. + +또한, 검증인들은 거버넌스 절차에서 더 큰 권한을 보유합니다. 예를 들어, 거버넌스 투표를 하지 않는 위임인은 본인이 스테이킹 한 검증인들의 표를 따르게 됩니다. 이런 이유로 검증인들은 생태계 내에서 중대한 책임감을 지게 됩니다. + +### 검증인 커미션은 무엇인가요? + +검증인 풀에게 지급되는 수익은 검증인과 위임인들 사이에서 나눠어집니다. 각 검증인은 위임인들에게 지급하는 수익에서 일정의 수수료를 '커미션'의 형태로 차감할 수 있습니다. 커미션은 퍼센트 값으로 설정됩니다. 각 검증인은 본인 정책에 따라 최초 커미션을 설정할 수 있으며, 일일 최대 변경값 또한 정할 수 있습니다. 코스모스 허브는 해당 검증인이 설정한 파라미터를 따릅니다. 이런 값은 검증인이 초기에 검증인 참여 의사를 밝힐때 설정할 수만 있으며, 검증인으로 선택된 이후 변경될 수 없습니다. + +### 블록 생성 보상은 어떻게 나누어지나요? + +블록 생성 보상은 검증인의 총 위임 물량에 비례하여 분배됩니다. 코스모스 허브는 블록을 생성한 검증인만 보상을 받지만 확률적으로 특정 기간 안에서 검증인들의 전체적인 블록 보상률은 스테이킹 수량에 비례하게 설계되었습니다. + +10명의 검증인이 동일한 스테이킹 물량과 동일한 1%의 커미션을 가진 경우를 예시롤 들겠습니다. 만약 블록 생성에 대한 보상이 1,000 아톰이며 검증인들은 각자 20%의 스테이킹 물량을 자체 위임(셀프본딩) 했다고 보겠습니다. 1,000개의 블록생성 보상은 제안자에게 바로 지급되지 않으며, 검증인들 사이에서 스테이킹 수량에 비례하여 분배됩니다. 즉, 10명의 검증인들은 각자 100 아톰의 보상을 받게되는 것입니다. 이후 이 100 아톰은 다음과 같이 위임인들과 검증인들 사이에서 분배됩니다: + +* 커미션: `100*80%*1% = 0.8아톰` +* 밸리데이터가 가지는 보상: `100\*20% + 커미션 = 20.8 아톰` +* 모든 위임인들이 나누는 보상: `100\*80% - 커시면 = 79.2 아톰` + +이후 각 위임인은 79.2 아톰 중에서 각자 위임한 물량에 비례하는 보상을 수령할 수 있습니다. 포톤(photon) 또한 이와 동일한 메커니즘을 통해 분배됩니다. + +### 수수료는 어떻게 나누어지나요? + +수수료는 위와 비슷하게 분배되지만, 제안자가 최소 프리커밋(precommit) 보다 많은 프리커밋을 받을 경우 수수료에 대한 보너스를 지급 받습니다. + +블록 제안자로 선택된 검증인은 다른 검증인 2/3 이상의 서명을 통해 프리커밋을 받아야 블록을 생성할 수 있습니다. 추가적으로, 제안자는 특정 블록에서 검증인 2/3 이상의 서명을 받는 것에 대한 인센티브가 존재합니다. 보너스는 선형적으로 증가합니다: 2/3의 프리커밋을 받은 경우 1% 보너스로 시작하여 100% 프리커밋을 받은 경우 5% 보너스로 증가합니다. 하지만 제안자는 프리커밋을 과도하게 기다릴 경우 블록 제안 시간을 초과하여 제안자 순서가 다른 검증인으로 넘어갈 수 있다는 점을 유의해야 합니다. 이런 이유로 검증인들은 시간을 초과하지 않되 최대한 많은 프리커밋을 받을 수 있는 기간의 균형을 찾아야 합니다. 이 메커니즘은 검증인이 빈 블록을 생성하는 것을 방지하고 검증인 간 네트워킹 향상하며 검증인 검열을 방지하기 위해 도입되었습니다. + +이 개념에 대한 예시를 들겠습니다. 10명의 동일한 스테이킹 물량을 가진 검증인들이 각자 1% 커미션과 20% 자체 본딩을 하고 있는 상황을 가정합니다. 새로운 총 1025.51020408 아톰의 보상이 있는 새로운 블록이 생성됩니다. + +우선 2% 수수료가 삭감되고 예비 풀(reserve pool)로 이동합니다. 이 예비 풀은 거버넌스를 통해 업그레이드와 버그 바운티를 지급하는데 이용됩니다. + +* `2% \* 1025.51020408 = 20.51020408` 아톰이 예비 풀로 이동합니다. + +이제 1005 아톰이 남아있습니다. 만약 블록 제안자가 해당 블록에 100% 프리커밋 서명을 포함했다면 최대 보너스인 5%를 지급받습니다. + +각 검증인들에 대한 보상인 R을 찾기 위해서는 다음의 공식을 적용합니다: + +`9*R + R R*5% = 1005 ⇔ R = 1005/10.05 = 100` + +* 제안자 검증인: + * 풀(pool)이 `R + R * 5%`를 얻음: 105 아톰 + * 커미션: `105 * 80% * 1%` = 0.84 아톰 + * 검증인 보상: `105 * 20% + 커미션` = 21.84 아톰 + * 위임인 보상: `105 * 80% - 커미션` = 83.16 아톰 (각 위임인은 본인의 위임 수량에 비례하는 보상을 받음) + +* 제안을 하지 않은 검증인: + * 풀이 R 아톰을 얻음: 100 아톰 + * 커미션: `100 * 80% * 1%` = 0.8 아톰 + * 검증인 보상: `105 * 20% + 커미션` = 20.8 아톰 + * 위임인 보상: `100 * 80% - 커미션` = 79.2 아톰 (각 위임인은 본인의 위임 수량에 비례하는 보상을 받음) + +### 슬래싱 페널티를 발생하는 경우는 무엇이 있나요? + +특정 검증인이 악의적으로 행동할 경우, 검증인에게 본딩된 아톰(위임인들의 아톰 포함)은 슬래싱이 됩니다. 슬래싱 페널티는 악의적인 행동에 비례한 가중치가 적용됩니다. 검증인과 위임인들의 스테이크가 슬래싱 되는 경우는 3개가 있습니다: + +* **이중 서명(더블 사이닝):** 누군가 체인A에서 특정 검증인이 동일한 높이의 두개의 블록을 체인A와 체인B에서 서명한 경우 (체인A 와 체인B 가 동일한 ancestor에서 유례한 경우) 해당 검증인은 체인A에서 슬래싱될 수 있습니다. +* **오프라인(unavailability):** 특정 검증인의 서명이 X 블록동안 포함되지 않았을 경우, 해당 검증인은 X 에 비례한 소량의 아톰이 슬래싱됩니다. 만약 X가 사전에 설정된 Y 한도보다 높을 경우, 해당 검증인은 언본딩 됩니다. +* **미투표(non-voting):** 특정 검증인이 거버넌스 프로포절에 투표를 하지 않는 경우 소량의 스테이크가 슬래싱될 수 있습니다. + +검증인의 행동의 의도적으로 악의적이지 않아도(예시: 노드 에러, 인터넷 연결 문제, DDoS, 프라이빗 탈취) 검증인은 슬래싱될 수 있다는 점을 참고하시기 바랍니다. + +### 검증인은 꼭 자체 위임(셀프본딩)을 해야하나요? + +검증인은 자체 위임을 하지 않아도 검증인을 할 수 있습니다. 검증인의 총 스테이킹 수량은 셀프본딩 수량과 위임 수량의 합입니다. 셀프본딩이 낮은 검증인은 많은 위임인들의 스테이크를 통해 총 스테이킹 수량을 늘릴수 있습니다. 이런 이유로 검증인의 평판은 중요한 요소로 적용합니다. + +검증인이 셀프본딩 할 의무는 없을 수 있지만, 위임인들의 대다수는 검증인들이 셀프본딩을 하는 것을 선호할 수 있습니다. 본인에 행동에 대한 책임감을 보여줄 수 있기 때문입니다. + +검증인들은 본인의 책임감을 표기하기 위해서 자체적인 최소 셀프본딩 수량을 설정할 수 있습니다. 만약 해당 검증인의 셀프본딩률이 해당 수치보다 낮아질 경우, 해당 검증인들과 모든 위임인들의 아톰은 언본딩 됩니다. + +### 상위 검증인에게 스테이킹이 몰리는 현상은 어떻게 막을 수 있나요? + +현재로써는 커뮤니티가 자체적으로 이런 위험성을 인지하고 위임하는 것을 예상하고 있습니다. 비트코인의 경우, 특정 채굴풀이 과도한 해시파워를 확보한 경우 커뮤니티는 자체적으로 해당 채굴풀에 대한 위임을 멈춥니다. 코스모스는 초기에 이와 비슷한 형태로 채굴풀의 중앙화를 조절할 수 있을 것으로 기대하고 있습니다. 추후에는 이런 현상을 막을 수 있는 장치들이 소개될 예정입니다: + +* **무-페널티 재위임(penalty-free re-delegation):** 특정 검증인에 과도하게 묶여있는 현상을 줄이기 위해서 한 검증인에서 다른 검증인으로 위임을 쉽게 바꿀 수 있는 방식. +* **해킹 바운티:** 커뮤니티가 검증인을 해킹하는 것을 장려하는 정책. 바운티 보상은 검증인이 스테이킹 하고 있는 물량의 크기에 비례. +* **UI 경고:** 코스모스 보이저(Cosmos Voyager) 지갑을 이용하는 유저는 이미 과도한 스테이킹 물량을 보유하고 있는 검증인에게 위임을 하려고 할때 경고를 받는다. + +## 기술적 요건 + +### 필요한 하드웨어 장비는 무엇인가요? + +검증인은 전력, 네트워킹, 방화벽, 하드웨어 보안 모듈과 서버 백업이 있는 하나 이상의 데이터 센터를 제공할 것을 추천합니다. + +네트워크 초기의 하드웨어 요건은 그리 고성능이 아닐 것으로 예상하고 있지만, 네트워크 사용량이 증가하면서 하드웨어 스펙 또한 증가할 것을 예상하고 있습니다. 테스트넷에 참가해서 하드웨어 세팅을 실험해보는 것을 추천드립니다. + +### 필요한 소프트웨어는 무엇인가요? + +코스모스 허브 노드 외에도 모니터링, 알림, 관리 솔루션을 준비해야할 것으로 예상하고 있습니다. + +### 필요한 대역폭은 어느 정도 인가요? + +코스모스 네트워크는 이더리움과 비트코인에 비교해서 많은 대역폭과 쓰루풋(throughput)을 필요로 합니다. + +데이터 센터 노드는 신뢰할 수 있는 클라우드 풀노드와 사회적으로 신뢰할 수 있는 다른 검증인들에게만 연결하는 것을 추천드립니다. 이는 데이터 센터의 노드과 DDoS 공격의 피해를 입는 것을 방지할 수 있습니다. + +네트워크가 성장하면서 매일 몇 기가바이트 이상의 대역폭을 사용하는 것은 현실적인 것으로 판단됩니다. + +### 검증인을 하는 것은 운영 측면에서 어떤가요? + +성공적인 검증인은 다수의 실력있는 운영 인력이 확보되어야 할 것으로 예측됩니다. 코스모스 검증인 운영은 비트코인 채굴에 비해서 높은 난이도에 속합니다. + +### 키 관리는 어떻게 하는 것이 바람직한가요? + +검증인은 ed25519 키를 지원하는 하드웨어 보안 모듈(HSM, Hardware Security Module)을 이용하는 것을 추천드립니다. 다음은 추천이 가능한 HSM들의 일부입니다: + +* YubiHSM 2 +* Ledger Nano S +* Ledger BOLOS SGX enclave +* Thales nShield support + +텐더민트 팀은 특정 회사의 솔루션을 지목하여 추천하지 않습니다. 검증인 커뮤니티는 자체적으로 HSM을 이용한 보안 솔루션을 연구하여 향상시킬 것을 권장합니다. + +### 운영 측면에서 어떤 요소들이 있나요? + +효율적으로 검증인을 운영하는 것은 예측 할 수 없는 언본딩과 슬래싱을 막는 것입니다. 이는 공격에 대한 대응, 전력 단절, 네트워크 단절, 보안 등에 대한 모든 위험 요소를 차단하고 준비하는 것입니다. + +### 보수 측면에서 어떤 것들이 요구되나요? + +검증인은 정기적으로 소프트웨어 업그레이드와 버그 패치를 적용해야합니다. 네트워크 초기에는 다수의 문제들이 발생할 수 있을 것으로 예상되기 때문에 검증인들은 유심히 네트워크 상태를 모니터링 해야 합니다. + +### 검증인은 어떻게 DDoS 공격에 방어를 할 수 있을까요? + +DDoS 공격은 공격자가 특정 IP의 서버에게 인터넷 트래픽을 과도하게 발생시켜 인터넷에 연결되는 것을 막는 공격입니다. + +공격자는 네트워크를 스캔하여 특정 IP 주소를 지목하고 엄청난 트래픽을 발생시켜 공격을 하여 해당 노드의 정상적인 운영을 막습니다. + +이런 공격을 막을 수 있는 하나의 방법은 노드에 센트리노드 아키텍쳐를 도입하여 방어율을 높이는 것입니다. + +검증인 노드는 본인이 직접 운영하는 풀노드 또는 사회적으로 신뢰가 가능한 다른 검증인이 운영하는 풀노드에만 연결해야 합니다. 검증인 노드의 대다수는 데이터 센터에서 운영이 되며, 대다수의 데이터 센터는 다른 클라우드 서비스 제공자와 직접적인 연결을 제공합니다. 검증이는 이런 직접 연결을 통해서 클라우드에 있는 센트리노드를 연결할 수 있습니다. 이런 형태의 아키텍처는 DDoS 공격의 부담을 검증 노드에서 센트리 노드로 우회합니다. 공격 상황에서 새로운 센트리노드를 생성하는 것은 다소 쉽기 때문에 공격의 위험성을 줄일 수 있습니다. + +센트리노드는 새로 생성되거나 IP 주소를 변경할 수 있습니다. 센트리노드와 검증노드 간의 연결은 프라이빗 IP를 통해서 이루어지기 떄문에 공격자는 직접적으로 공격을 할 수 없습니다. 이는 검증 노드가 언제나 블록 제안과 블록 투표에 참여할 수 있게 합니다. + +올바른 운영과 아키텍쳐를 이용하는 검증이는 이런 공격 가능성을 막을 수 있을 것으로 기대됩니다. + +센트리노드에 대한 추가적인 정보는 [여기](https://forum.cosmos.network/t/sentry-node-architecture-overview/454)에서 확인 가능합니다. diff --git a/docs/translations/kr/gaia/validators/validator-setup.md b/docs/translations/kr/gaia/validators/validator-setup.md new file mode 100755 index 0000000000..aeaff5ff35 --- /dev/null +++ b/docs/translations/kr/gaia/validators/validator-setup.md @@ -0,0 +1,264 @@ +# 퍼블릭 테스트넷에서 밸리데이터 운영하기 + +::: tip +현재 테스트넷을 참가하는 방법은 [`testnet` repo](https://github.com/cosmos/testnets/tree/master/latest)에 있습니다. 최신 테스트넷에 대한 정보를 확인하시려면 해당 링크를 확인해주세요. +::: + +__Note__: 이 문서는 **퍼블릭 테스트넷** 검증인들을 위해서만 작성되었습니다. + +밸리데이터 노드를 세팅하기 전, [풀노드 세팅](../join-testnet.md) 가이드를 먼저 확인해주세요. + +## 밸리데이터란 무엇인가? + +[밸리데이터](./overview.md)는 블록체인의 투표를 통해서 새로운 블록은 생성하는 역할을 합니다. 만약 특정 밸리데이터가 오프라인이 되거나, 같은 블록높이에서 중복 사이닝을 한 경우 해당 밸리데이터의 지분은 삭감(슬래싱, slashing) 됩니다. 노드를 DDOS 공격에서 보호하고 높은 접근성을 유지하기 위해서는 [센트리노드 아키텍쳐](./validator-faq.md#how-can-validators-protect-themselves-from-denial-of-service-attacks)에 대해서 읽어보세요. + + +::: danger 경고 +코스모스 허브의 검증인이 되는 것을 검토하신다면, [보안에 대한 분석](./security.md)을 사전에 하시기를 바랍니다. +::: + +만약 [풀노드](../join-testnet.md)를 이미 운영중이시다면, 다음 항목을 건너뛰셔도 좋습니다. + +## 밸리데이터 생성하기 + +토큰 스테이킹을 통해 `cosmosvalconspub`로 새로운 밸리데이터를 생성할 수 있습니다. 본인의 밸리데이터 pubkey를 확인하기 위해서는 다음 명령어를 입력하세요: + + +```bash +gaiad tendermint show-validator +``` + +다음은 `gaiad gentx` 명령을 입력하세요: + +::: warning 참고 +보유하고 있는 `STAKE`이상을 이용하지 마십시오. 언제나 [Faucet](https://faucet.cosmos.network/)을 통해서 추가 `STAKE`를 받으실 수 있습니다. +::: + +```bash +gaiacli tx staking create-validator \ + --amount=5STAKE \ + --pubkey=$(gaiad tendermint show-validator) \ + --moniker="choose a moniker" \ + --chain-id=<chain_id> \ + --from=<key_name> \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" +``` + +__참고__: 커미션 값을 설정하실 때, `commission-max-change-rate`는 기존 `commission-rate`에서의 *퍼센트 포인트* 변경을 기준으로 측정됩니다. 예) 커미션이 1%에서 2%로 변경되는 것은 100% 상승되는 것이지만, 1%p 변경. + +__참고__: `consensus_pubkey` 값이 지정되지 않은 경우, 기본적으로 `gaiad tendermint show-validator` 의 값으로 설정됩니다. `key_name`은 트랙잭션을 서명할때 이용되는 프라이빗키의 명칭입니다. + +## 밸리데이터로써 제네시스 참가하기 + +__참고__: 이 문항은 제네시스 파일에 참가하려는 밸리데이터에게만 해당됩니다. 만약 검증을 하려는 체인이 이미 작동되고 있는 상태라면 이 항목을 건너뛰셔도 좋습니다. + + +밸리데이터로써 제네시스에 참가하고 싶으시다면 우선 본인(또는 위임자)가 stake를 보유하고 있다는 것을 증명해야 합니다. 스테이크를 검증인에게 본딩하는 하나 이상의 트랜잭션을 발생하신 후, 해당 트랜잭션을 제네시스 파일에 추가하시기 바랍니다. + +우선 두가지의 케이스가 존재합니다: + +- 경우 1: 본인 밸리데이터의 stake를 본딩(위임)한다. +- 경우 2: 타인(위임자)의 stake를 본딩한다. + +### Case 1: 최초 위임이 밸리데이터 본인 주소에서 발생하는 경우 + +이런 경우에는 `gentx`를 생성하셔야 합니다: + +```bash +gaiad gentx \ + --amount <amount_of_delegation> \ + --commission-rate <commission_rate> \ + --commission-max-rate <commission_max_rate> \ + --commission-max-change-rate <commission_max_change_rate> \ + --pubkey <consensus_pubkey> \ + --name <key_name> +``` + +__참고__: 이 명령어는 제네시스에서의 처리를 위해 `gentx`를 `~/.gaiad/config/gentx`에 저장합니다. + +::: tip +명령어 플래그에 대한 정보는 `gaiad gentx --help`를 사용에 확인하십시오. +::: + +`gentx`는 자체위임 정보가 포함된 JSON 파일입니다. 모든 제네시스 트랜잭셕은 `genesis coordinator`에 의하여 모아진 후 최초 `genesis.json`파일과 대치하여 검증합니다. 최초 `genesis.json`에는 계정 리스트와 각 계정이 보유하고 있는 코인 정보가 포함되어있습니다. 트랜잭션이 처리되었다면 해당 정보는 `genesis.json`의 `gentx` 항목에 머지(merge)됩니다. + +### Case 2: 최초 위임이 위임자(delegator) 주소에서 발생하는 경우 + +이런 경우에는 위임자와 검증인의 서명이 둘다 필요합니다. 우선 서명이 되지 않은 `create-validator` 트랜잭션을 생성하신 후 `unsignedValTx`라는 파일에 저장하십시오: + +```bash +gaiacli tx staking create-validator \ + --amount=5STAKE \ + --pubkey=$(gaiad tendermint show-validator) \ + --moniker="choose a moniker" \ + --chain-id=<chain_id> \ + --from=<key_name> \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --address-delegator="address of the delegator" \ + --generate-only \ + > unsignedValTx.json +``` + +이제 해당 `unsignedValTx`를 밸리데이터의 프라이빗 키를 이용해 서명합니다. 서명이된 아웃풋을 `signedValTx.json`이라는 파일에 저장합니다: + +```bash +gaiacli tx sign unsignedValTx.json --from=<validator_key_name> > signedValTx.json +``` + +이제 이 파일을 위임자에게 전달하세요. 위임인은 다음 명령어를 실행하면 됩니다: + +```bash +gaiacli tx sign signedValTx.json --from=<delegator_key_name> > gentx.json +``` + +이 파일은 제네시스 절차에서 필요하기 때문에 Case 1과 동일하게 `gentx.json`은 밸리데이터 머신의 `~/.gaiad/config/gentx` 폴더에 포함되어야 합니다 (Case 2 에서는 직접 해당 파을을 이동해야 합니다). + + +### 제네시스 파일 복사, 제네시스 트랜잭션 처리하기 + +우선 `genesis.json`파일을 `gaiad`의 config 디렉토리로 가져옵니다. + +Fetch the `genesis.json` file into `gaiad`'s config directory. + +```bash +mkdir -p $HOME/.gaiad/config +curl https://raw.githubusercontent.com/cosmos/testnets/master/latest/genesis.json > $HOME/.gaiad/config/genesis.json +``` + +__참고:__ 이 항목에서는 최신 테스트넷 관련 정보가 있는 [테스트넷 repo](https://github.com/cosmos/testnets)의 `latest` 디렉토리를 사용합니다. 만약 다른 테스트넷에 연결하신다면 이용하시는 파일을 확인하시기 바랍니다. + +이제 다른 제네시스 밸리데이터들의 제네시스 트랜잭션을 가져옵니다. 현재 밸리데이터들이 본인들의 제네시스 트랜잭션을 제공할 수 있는 리포지토리가 없는 상태이나, 추후 테스트넷에서 검증 후 추가될 예정입니다. + +모든 제네시스 트랜잭션을 받으시고 `~/.gaiad/config/gentx`에 저장하셨다면 다음 명령어를 실행하십시오: + +```bash +gaiad collect-gentxs +``` + +__참고:__ `gentx`에서 위임을 하는 계정에 스테이크(stake) 토큰이 있는 것을 확인하세요. 만약 해당 계정에 토큰이 없다면 `collect-gentx`가 실패하게 됩니다. + +이전에 실행하신 명령어는 모든 제네시스 트랜잭션을 모으고 `genesis.json`을 파이널라이즈(finalize)합니다. 설정이 올바르게 되었는지 확인하기 위해서는 노드를 시작하십시오: + +```bash +gaiad start +``` + +## 검증인 설명 수정하기 + +검증인의 공개 설명 문구와 정보는 수정이 가능합니다. 이 정보는 위임자들이 어떤 검증인에게 위임을 할지 결정할때 이용될 수 있습니다. 각 플래그에 대해서 정보를 꼭 입력하시기 바랍니다. 만약 비어있는 항목이 있다면 해당 값은 빈 상태로 유지됩니다 (`--moniker`의 경우 머신 이름 값이 사용됩니다). + +`--identity` 값은 Keybase 또는 UPort 같은 시스템을 이용해서 신분(identity)를 검증하는데 이용될 수 있습니다. Keybase를 사용하시는 경우 `--identity`는 [keybase.io](https://keybase.io) 계정으로 생성하신 16자리 string 값이 입력되어야 합니다. 이런 절차는 다수의 온라인 네트워크에서 본인의 신분을 증명하는데 이용될 수 있습니다. 또한 Keybase API를 이용해서 Keybase 아바타를 가져와 밸리데이터 프로파일에 이용하실 수 있습니다. + +```bash +gaiacli tx staking edit-validator + --moniker="choose a moniker" \ + --website="https://cosmos.network" \ + --identity=6A0D65E29A4CBC8E \ + --details="To infinity and beyond!" \ + --chain-id=<chain_id> \ + --from=<key_name> \ + --commission-rate="0.10" +``` + +__참고__: `commission-rate` 값은 다음의 규칙을 따라야 합니다: + +- 0 과 `commission-max-rate` 값의 사이 +- 검증인의 `commission-max-change-rate` 값을 초과할 수 없습니다. `commission-max-change-rate`는 하루에 최대 커미션 값을 변경할 수 있는 한도입니다. 밸리데이터는 하루에 한번 `commission-max-change-rate`의 한도 안에서만 커미션을 변경할 수 있습니다. + +## 밸리데이터 설명 확인하기 + +검증인의 정보는 다음 명령어로 확인이 가능합니다: + +```bash +gaiacli query staking validator <account_cosmos> +``` + +## 밸리데이터 서명 정보 추적하기 + +특정 검증인의 과거 서명 정보를 확인하기 위해서는 `signing-info` 명령어를 이용하실 수 있습니다: + +```bash +gaiacli query slashing signing-info <validator-pubkey>\ + --chain-id=<chain_id> +``` + +## 밸리데이터 석방(Unjail)하기 + +특정 검증인이 과도한 다운타임으로 '구속(jailed)' 상태로 전환되면 운영자의 계정에서 '석방(unjail)' 요청 트랜잭션을 전송해야만 다시 블록 생성 리워드를 받을 수 있습니다(각 존의 리워드 분배 정책에 따라 다를 수 있음). + +```bash +gaiacli tx slashing unjail \ + --from=<key_name> \ + --chain-id=<chain_id> +``` + +## 밸리데이터 작동상태 확인 + +다음 명령어가 반응을 준다면 당신의 밸리데이터는 작동하고 있습니다: + +```bash +gaiacli query tendermint-validator-set | grep "$(gaiad tendermint show-validator)" +``` + +코스모스 테스트넷의 경우 코스모스 [익스플로러](https://explorecosmos.network/validators)를 통해서 밸리데이터가 운영되고 있는지 확인하실 수 있습니다. `~/.gaiad/config/priv_validator.json` 파일의 `bech32` 인코딩이된 `address` 항목을 참고하세요. + +::: warning 참고 +검증인 세트에 포함되시기 원하신다면 100등 밸리데이터보다 보팅 파워(voting power)가 높아야 합니다. +::: + +## 흔히 발생하는 문제들 + +### 문제 #1: 내 검증인의 보팅 파워가 0 입니다 + +밸리데이터가 자동 언본딩 되었습니다. `gaia-8000`의 경우, 100개 블록 중 50개의 블록에 투표하지 않을 경우 언본딩 됩니다. 블록은 대략 ~2초 마다 생성되기 때문에 ~100초 이상 비활성화 상태를 유지하는 밸리데이터는 언본딩 될 수 있습니다. 가장 흔한 이유는 `gaiad` 프로세스가 멈춘 경우입니다. + +보팅 파워를 다시 밸리데이터에게 되돌리기 위해서, 우선 `gaiad`가 실행되고 있는지 확인하십시오. 만약 실행되고 있지 않은 경우 다음 명령어를 실행하십시오: + +```bash +gaiad start +``` + +당신의 풀노드가 최신 블록높이에 싱크될때까지 기다리십시오. 이후, 다음 명령어를 실행하십시오. 참고로 `<cosmos>` 항목은 밸리데이터 계정의 주소이며, `<name>`은 밸리데이터 계정의 이름입니다. 해당 정보는 `gaiacli keys list` 명령어를 통해 확인하실 수 있습니다. + +```bash +gaiacli tx slashing unjail <cosmos> --chain-id=<chain_id> --from=<from> +``` + +::: danger 경고 +`gaiad`가 싱크되지 않은 상태에서 `unjail` 명령을 실행하실 경우, 검증인이 아직 '구속' 상태라는 메시지를 받게 됩니다. +::: + +마지막으로 밸리데이터의 보팅파워가 복구 되었는지 확인하십시오. + +```bash +gaiacli status +``` + +만약 보팅 파워가 예전보다 감소되었다면 다운타임에 대한 슬래싱이 이유일 수 있습니다. + +### 문제 #2: `too many open files`때문에 `gaiad`가 강제 종료됩니다 + +리눅스가 각 프로세스당 열 수 있는는 파일 수는 최대 `1024`개입니다. `gaiad`는 1024개 이상의 열게될 수 있음으로 프로세스가 중단될 수 있습니다. 가장 간편한 해결책은 `ulimit -n 4096` (열 수 있는 최대 파일 수)명령어를 입력하고 프로세스를 `gaiad start`로 재시작하는 것입니다. 만약 `systemd` 또는 다른 프로세스 매니저로 `gaiad`를 실행하신다면 해당 레벨에서 몇가지 설정을 해야합니다. 문제 해결 샘플 `systemd` 파일은 다음과 같습니다: + +```toml +# /etc/systemd/system/gaiad.service +[Unit] +Description=Cosmos Gaia Node +After=network.target + +[Service] +Type=simple +User=ubuntu +WorkingDirectory=/home/ubuntu +ExecStart=/home/ubuntu/go/bin/gaiad start +Restart=on-failure +RestartSec=3 +LimitNOFILE=4096 + +[Install] +WantedBy=multi-user.target +``` diff --git a/docs/translations/kr/gaia/what-is-gaia.md b/docs/translations/kr/gaia/what-is-gaia.md new file mode 100644 index 0000000000..8bf1c92016 --- /dev/null +++ b/docs/translations/kr/gaia/what-is-gaia.md @@ -0,0 +1,22 @@ +# Gaia는 무엇인가요? + +가이아(`gaia`)는 코스모스 허브의 코스모스 SDK 애플리케이션의 이름입니다. 가이아는 두개의 엔트리 포인트로 구성돼있습니다: + +- `gaiad`: 가이아 데몬, `gaia` 애플리케이션의 풀노드를 운영합니다. +- `gaiacli`: 가이아 커맨드 라인 인터페이스는 유저가 가이아 풀노드와 소통할 수 있게 합니다. + +`gaia`는 코스모스 SDK의 다음 모듈들을 이용해 제작되었습니다: + +- `x/auth`: 계정 및 서명 +- `x/bank`: 토큰 전송 +- `x/staking`: 스테이킹 로직 +- `x/mint`: 인플레이션 로직 +- `x/distribution`: 수수료(보상) 분배 로직(fee distribution logic) +- `x/slashing`: 슬래싱 로직 +- `x/gov`: 거버넌스 로직 +- `x/ibc`: 인터블록체인 전송 +- `x/params`: 앱레벨 파라미터 관리 + + + + >코스모스 허브에 대해서: 코스모스 허브는 코스모스 네트워크의 최초 허브입니다. 허브는 블록체인 간 전송을 수행하는 역할을 합니다. IBC를 통해 특정 허브에 연결된 블록체인은 해당 허브에 연결되어있는 모든 블록체인과 함께 연결됩니다. 코스모스 허브는 지분증명 기반 퍼블릭 블록체인이며, 고유 토큰은 아톰(Atom)입니다. 다음은 Gaia를 [설치하는 방법](./installation.md)을 알아보겠습니다. \ No newline at end of file diff --git a/docs/translations/kr/intro/README.md b/docs/translations/kr/intro/README.md new file mode 100755 index 0000000000..058d0e57f0 --- /dev/null +++ b/docs/translations/kr/intro/README.md @@ -0,0 +1,15 @@ +# SDK 소개 + + + +[Cosmos-SDK](https://github.com/cosmos/cosmos-sdk)는 코스모스 허브 같은 멀티애셋 지분증명(Proof-of-Stake) 블록체인 또는 권한증명(Proof-of-Authority) 같은 블록체인들을 만들 수 있는 하나의 프레임워크입니다. + +코스모스 SDK의 목표는 개발자들이 본인만의 커스텀 블록체인을 처음부터 쉽게 만들고, 이런 블록체인들이 상호호환성을 가질 수 있게 하는 것입니다. 우리는 코스모스 SDK가 [Tendermint](https://github.com/tendermint/tendermint) 기반의 안전한 블록체인 애플리케이션의 npm 프레임워크 같은 역할을 할수 있을 것을 기대하고 있습니다. + +코스모스 SDK는 다음과 같은 원칙에 의거합니다: + +- **구성성:** 누구나 코스모스-SDK 모듈을 만들 수 있다. 또한 이미 만들어진 기존 모듈을 내가 만드려는 블록체인 애플리케이션에 손쉽게 도입할 수 있다. + +- **능력성:** 코스모스-SDK는 능력기반 보안(capabilities-based security)과 수년의 블록체인 스테이트 머신에 대한 고민을 기반으로 만들어졌습니다. 대다수의 개발자들은 본인들의 모듈을 개발할때 제3자의 모듈을 사용해야되는 경우가 많습니다. 코스모스-SDK는 오픈 프레임워크이기 때문에, 일부 악의적인 모듈이 존재할 수 있다는 것을 배제할 수 없습니다. 이런 환경에서는 보안과 안전성을 확보하기 위해 모듈간 인터랙션에서 기본적인 보안 원칙이 존재해야 합니다. 이런 원칙은 오브젝트-능력(object-capabilities) 기반으로 만들어졌습니다. 각 모듈이 다른 모든 모듈들의 액세스 권한 리스트를 관리하기 보다, 각 모듈은 키퍼(Keeper)라는 특수 오브젝트를 도입할 수 있습니다. 이런 '키퍼' 들은 다른 모듈에게 전달되어 사전에 정의된 능력(기능)을 수행할 수 있는 권한을 부여합니다. 예를 들어, 모듈 A의 키퍼가 모듈 B에게 전달되었을 경우, 모듈 B는 사전에 정의되어있는 한정된 모듈 A의 기능을 호출할 수 있습니다. 각 키퍼가 수행할 수 있는 기능은 해당 모듈의 개발자가 정의할 수 있으며, 모듈 기능으로 발생할 수 있는 안전/보안 문제를 감사하는 책임은 각 개발자에게 있습니다. 능력(capability)에 대한 더 자세한 설명은 다음 [링크](./ocap.md)에서 확인하실 수 있습니다. + +### 다음은 [SDK 애플리케이션 아키텍쳐](./sdk-app-architecture.md)에 대해서 알아보겠습니다 \ No newline at end of file diff --git a/docs/translations/kr/intro/ocap.md b/docs/translations/kr/intro/ocap.md new file mode 100755 index 0000000000..ba0a2058d4 --- /dev/null +++ b/docs/translations/kr/intro/ocap.md @@ -0,0 +1,68 @@ +# 오브젝트-가능성 모델(Object-Capability Model) + +## 개요 + +보안을 검토하기 위해서는 특정 위협 모델(threat model)을 검토하는 것으로 시작하는 것이 좋습니다. 우리가 제시하는 모델은 다음과 같습니다: + +> 코스모스-SDK 모듈을 기반으로 만들어진 블록체인 애플리케이션이 활성화된 생태계에는 허점이 있거나 악의적인 모듈이 존재할 수 있다고 전재합니다. + +코스모스 SDK는 오브젝트-가능성 시스템의 토대가 됨으로 이런 문제점을 해결할 수 있습니다. + +> 오브젝트 가능성 시스템의 구조적 속성은 코드 디자인의 모듈화와 안정적인 캡슐화(encapsulation)를 선호합니다. +> +> 이런 구조적 속성은 오브젝트-가능 프로그램 또는 운영체제의 보안적 속성의 분석을 가능하게 합니다. 정보 플로우 속성(information flow properties) 같은 일부 속성은 특정 오브젝트의 행동을 결정하는 코드의 지식 또는 분석 없이도 오직 오브젝트 레퍼런스와 연결구조만으로 분석이 가능합니다. +> +> 그렇기 때문에, 악의적인 코드가 포함되있을 확률이 있는 새로운 오브젝트가 소개되더라도 보안적 속성은 지켜질 수 있습니다. +> +> 이런 구조적 속성은 해당 오브젝트를 통치하는 두가지 법칙에 의해 지켜질 수 있습니다: +> 1. 오브젝트 'A'는 'B'에 대한 레퍼런스를 보유하고 있을 경우에만 메시지를 전송할 수 있다. +> 2. 오브젝트 'A'가 'C'에 대한 레퍼런스를 가지고 싶다면 오브젝트 'A'는 'C'에 대한 레퍼런스가 포함된 메시지를 수신해야 한다. +> +> 이 두 법칙에 따르면 특정 오브젝트는 기존에 존재하는 레퍼런스 체인을 통해서만 다른 오브젝트에 대한 레퍼런스를 받을 수 있는 것입니다. 단순하게 설명하면 "연결성이 연결성을 불러온다"는 것입니다. + +오브젝트 가능성에 대한 소개는 [이 글(영문)](http://habitatchronicles.com/2017/05/what-are-capabilities/)을 참고하세요. + +원칙적으로 말하면, 다음과 같은 문제점 때문에 Golang은 엄격한 오브젝트 가능성을 도입하지 않는다고 볼 수 있습니다: + +- 보편적으로 "unsafe" 또는 "os" 같은 원시적 모듈(primitive module)을 임포트할 수 있음. +- 보편적으로 [모듈 vars 오버라이드(https://github.com/golang/go/issues/23161)]가 가능. +- 2개 이상의 goroutine이 illegal interface value를 만들 수 있는 data-race 허점. + +문제점 중 첫번째 문제는 임포트 감사(import audit)과 체계적인 디펜던시 버전 컨트롤 시스템(dependency version control system)을 이용하여 문제점을 사전에 찾을 수 있습니다. 다만, 두번째와 세번째 문제는 다서 불편하기는 하지만 노력을 통해서 감사(audit)가 가능합니다. + +현재로써는 [Go2에서 오브젝트 가능성 모델이 도입되는](https://github.com/golang/go/issues/23157)것을 기대하는 상태입니다. + +## 실전에서의 오브젝트 가능성 모델(Ocaps) + +Ocaps의 핵심 아이디어는 특정 일을 수행하는데 필요한 정보만을 공개하는 것입니다. + +예를 들어, 다음의 코드는 오브젝트 가능성 원칙을 위해합니다: + +```go +type AppAccount struct {...} +var account := &AppAccount{ + Address: pub.Address(), + Coins: sdk.Coins{sdk.NewInt64Coin("ATM", 100)}, +} +var sumValue := externalModule.ComputeSumValue(account) +``` + +위 코드의 `ComputeSumValue` 메소드는 순수한(pure) 함수를 암시하지만, 포인터 밸류를 받아드리는 것의 암시된 가능성(implied capability)은 해당 밸류를 변경할 수 있는 가능성입니다. 서명 메소드는 그대로 포인터 밸류를 받아들이지 않고 해당 밸류의 사본을 사용하는 것이 바람직합니다. + +```go +var sumValue := externalModule.ComputeSumValue(*account) +``` + +코스모스 SDK에서 이 원칙을 응용한 것을 [gaia 앱](../gaia/app/app.go)에서 확인이 가능합니다. + +```go +// register message routes +app.Router(). + AddRoute(bank.RouterKey, bank.NewHandler(app.bankKeeper)). + AddRoute(staking.RouterKey, staking.NewHandler(app.stakingKeeper)). + AddRoute(distr.RouterKey, distr.NewHandler(app.distrKeeper)). + AddRoute(slashing.RouterKey, slashing.NewHandler(app.slashingKeeper)). + AddRoute(gov.RouterKey, gov.NewHandler(app.govKeeper)) +``` + + diff --git a/docs/translations/kr/intro/sdk-app-architecture.md b/docs/translations/kr/intro/sdk-app-architecture.md new file mode 100755 index 0000000000..02de5f8339 --- /dev/null +++ b/docs/translations/kr/intro/sdk-app-architecture.md @@ -0,0 +1,59 @@ +# SDK 애플리케이션 아키텍쳐 + +## 스테이트 머신 (상태 기계, State machine) + +블록체인 애플리케이션은 근본적으로 [결정론적 복제 상태 기계(replicated deterministic state machine)](https://ko.wikipedia.org/wiki/%EC%83%81%ED%83%9C_%EA%B8%B0%EA%B3%84_%EB%B3%B5%EC%A0%9C)입니다. + +스테이트 머신은 특정 기계(머신, machine)이 오랜 기간동안 다수의 상태(스테이트, state)를 보유할 수 있지만, 특정 시점에 오직 하나의 상태를 유지하는 있는 컴퓨터 공학 개념입니다. 여기서 '스테이트 머신' 개념에는 시스템의 현 상태를 뜻하는 '스테이트(state)'가 있으며, 스테이트의 변경을 유발하는 +트랜잭션(transaction)'이 있습니다. + +`S` 라는 스테이트와 `T` 라는 트랜잭션이 있는 경우, 스테이트 머신은 `S'`라는 새로운 스테이트를 리턴합니다. + +``` ++--------+ +--------+ +| | | | +| S +---------------->+ S' | +| | apply(T) | | ++--------+ +--------+ +``` + +실전에서는 트랜잭션들이 일종의 '블록' 단위로 묶여 스테이트 변경 과정을 더 효율적일 수 있게 합니다. `S`라는 스테이트와 `B`라는 트랜잭션들이 있는 경우, 스테이트 머신은 `S'`라는 새로운 스테이트를 리턴합니다. + +``` ++--------+ +--------+ +| | | | +| S +----------------------------> | S' | +| | For each T in B: apply(T) | | ++--------+ +--------+ +``` + +블록체인이라는 시스템 내의 개념으로 볼때 스테이트 머신은 결정론적(deterministic)입니다. 즉, 특정 스테이트에서 시작한 후 동일한 트랜잭션들을 반복할 경우, 결과 스테이트는 언제나 동일합니다. + +코스모스 SDK는 애플리케이션의 스테이트, 트랜잭션 형태 그리고 스테이트 변경 기능(state-transition function)을 정의하는데 최대한의 유연성을 제공합니다. 코스모스 SDK를 이용해 스테이트 머신을 만드는 과정은 이후 항목에서 다루겠습니다. 우선 이 시스템 내에서 어떻게 **텐더민트**를 사용해 '스테이트'가 복제되는지 알아보겠습니다. + +## 텐더민트 + +개발자는 코스모스 SDK를 사용하여 스테이트 머신만을 정의하면 되며, 해당 스테이트를 네트워크에 복제하는 기능은 [*텐더민트*](https://tendermint.com/docs/introduction/introduction.html)가 제공합니다. + + +``` + ^ +-------------------------------+ ^ + | | | | 코스모스 SDK로 개발 + | | 스테이트 머신 = 애플리케이션 | | + | | | v + | +-------------------------------+ + | | | ^ + 블록체인 노드 | | 컨센서스 | | + | | | | + | +-------------------------------+ | 텐더민트 코어 + | | | | + | | 네트워킹 | | + | | | | + v +-------------------------------+ v +``` + +텐더민트는 오직 블록체인의 *네트워킹*과 *합의(컨센서스)* 계층을 처리하는 애플리케이션-불가지성(application-agnostic) 엔진입니다. 실전적으로 볼때, 텐더민트는 단순히 트랜잭션의 바이트를 나열하고, 해당 트랜잭션을 네트워크에 전파하는 역할만을 한다는 것입니다. 텐더민트 코어는 텐더민트 비잔틴 결함 감내(BFT, Byzantine-fault tolerant) 알고리즘을 사용하여 트랜잭션 순서에 대한 합의를 합니다. 텐더민트에 대해서 더 알고싶으시다면 [여기](https://tendermint.com/docs/introduction/introduction.html)를 확인하세요. + +텐더민트 합의 알고리즘은 '검증인(Validators)'이라는 특정 노드 세트를 기반으로 작동합니다. 검증인의 주 역할은 트랜잭션을 블록 단위로 블록체인에 추가하는 것입니다. 특정 블록에는 V 검증인 세트 검증인 존재하며, 이 V 검증인 세트 안에 있는 검증인 중 하나의 검증인이 다음 블록 생성자로 알고리즘에 의해 선택됩니다. 만약 블록이 V 검증인 세트 2/3 이상의 [프리보트(prevote)](https://tendermint.com/docs/spec/consensus/consensus.html#prevote-step-height-h-round-r)와 [프리커밋(precommit)](https://tendermint.com/docs/spec/consensus/consensus.html#precommit-step-height-h-round-r)을 받고 내용 트랜잭션이 유효한 경우 해당 블록은 '유효(valid)'한 것으로 간주됩니다. 검증인 세트는 스테이트 머신에 작성된 규칙에 따라서 바뀔 수 있습니다. 알고리즘에 대해 더 자세한 정보는 [여기](https://tendermint.com/docs/introduction/what-is-tendermint.html#consensus-overview)를 참고하세요. + +코스모스 SDK 애플리케이션의 주요 파트는 네트워크에 포함되어있는 노드가 각자 로컬 환경에서 운영하는 블록체인 데몬(daemon)입니다. 만약 *검증인 세트*의 1/3 이하가 악의적(byzantine)인 경우, 각 노드는 동시에 스테이트를 조회할때 동일한 결과를 받게됩니다. \ No newline at end of file diff --git a/docs/translations/kr/kr-translation-progress.md b/docs/translations/kr/kr-translation-progress.md new file mode 100644 index 0000000000..0c962d6db5 --- /dev/null +++ b/docs/translations/kr/kr-translation-progress.md @@ -0,0 +1,39 @@ +# Cosmos SDK Documentation Translation (Korean) + +This document tracks the progress of the Korean translation of the official Cosmos SDK documentation. + +Documentation has been translated for **reference use only** and may contain typos, factual errors and be out-of-date with the latest english documentation. + +Please refer to the official english version of the documentation for the latest and accurate information. + + +## 코스모스 SDK 도큐멘테이션 번역 (한국어) + +이 문서는 코스모스 공식 문서의 번역 작업 트래킹을 위한 문서입니다. + +번역된 문서는 **참고용**으로 번역되었습니다. 다수의 오타, 오류가 존재할 수 있으며, 영문 업데이트보다 번역이 느리게 진행될 수 있다는 점을 인지하시기 바랍니다. + +코스모스 관련 가장 정확한 정보를 확인하시기 위해서는 영어 원문을 참고하시기 바랍니다. + + +## Progress by directory + + +### [`concepts`](../concepts/) +- Synced until commit [14ebc65](https://github.com/cosmos/cosmos-sdk/commit/14ebc65daffd63e1adf17995c103aac9380207ef#diff-f874f370376bf359320af0543de53fcf) + +### [`spec`](../spec/) +- Redacted from until completion + +### [`gaia`](../gaia/) +- Synced until commit [288df6f](https://github.com/cosmos/cosmos-sdk/commit/288df6fe69dcef8fa95aca022039f92ba1e98c11#diff-3302fe357e01f0996ddb0f10adec85f0) + +### [`intro`](../intro/) +- Synced until commit [0043912](https://github.com/cosmos/cosmos-sdk/commit/0043912548808b4cfd6ab84ec49ba73bd5f65b5b#diff-e518eaec0d99787e6f75682d54751821) + +### [`modules`](../modules/) +- Synced until commit [78a2135](https://github.com/cosmos/cosmos-sdk/commit/78a21353da978d6c2a9b711f29b3874ff9ca14ae#diff-449cc65858e8929d15f4a170950e7758) + +### [`clients`](../clients/) +- Synced until Commit [857a65d](https://github.com/cosmos/cosmos-sdk/commit/857a65dc610cd736a47980b5d4778e5123206a3d#diff-93dd988c16d20a1bce170b86ad89425a) + diff --git a/docs/translations/kr/modules/README.md b/docs/translations/kr/modules/README.md new file mode 100755 index 0000000000..8f97eb6745 --- /dev/null +++ b/docs/translations/kr/modules/README.md @@ -0,0 +1,46 @@ +# Bank + +`x/bank` 모듈은 계정 간 코인을 이동할때 사용됩니다. + +[API 문서](https://godoc.org/github.com/cosmos/cosmos-sdk/x/bank)를 확인하세요. + +# Stake + +`x/staking` 모듈은 코스모스 위임형 지분증명(Delegated-Proof-of-Stake) 시스템에서 사용됩니다. + +[API 문서](https://godoc.org/github.com/cosmos/cosmos-sdk/x/staking)를 확인하세요. + +관련 스펙은 [여기](https://github.com/cosmos/cosmos-sdk/tree/develop/docs/spec/staking)에서 확인하실 수 있습니다. + + +# Slashing + +`x/slashing` 모듈은 코스모스 위임형 지분증명(Delegated-Proof-of-Stake) 시스템에서 사용됩니다. + +[API 문서](https://godoc.org/github.com/cosmos/cosmos-sdk/x/slashing)를 확인하세요. + +관련 스펙은 [여기](https://github.com/cosmos/cosmos-sdk/tree/develop/docs/spec/slashing)에서 확인하실 수 있습니다. + +# Provisions + +`x/provisions` 모듈은 수수료 보상 분배와 스테이킹 인플레이션을 조정할때 사용됩니다. + +[API 문서](https://godoc.org/github.com/cosmos/cosmos-sdk/x/provisions)를 확인하세요. + +관련 스펙은 [여기](https://github.com/cosmos/cosmos-sdk/tree/develop/docs/spec/provisions)에서 확인하실 수 있습니다. + +# Governance + +`x/gov` 모듈은 본딩한 토큰 보유자들이 프로포절을 만들고 투표를 진행할때 사용됩니다. + +[API 문서](https://godoc.org/github.com/cosmos/cosmos-sdk/x/gov)를 확인하세요. + +관렉 스펙은 [여기](https://github.com/cosmos/cosmos-sdk/tree/develop/docs/spec/governance)에서 확인하실 수 있습니다. + +# IBC + +`x/ibc` 모듈은 블록체인간 통신(InterBlockchain Communication)에서 사용됩니다. + +[API 문서를](https://godoc.org/github.com/cosmos/cosmos-sdk/x/ibc) 확인하세요. + +관련 스펙은 [여기](https://github.com/cosmos/cosmos-sdk/tree/develop/docs/spec/ibc)에서 확인하실 수 있습니다. From bb1fd58b1e8b5cec202e7c5e8148502b846bbe0d Mon Sep 17 00:00:00 2001 From: Christopher Goes <cwgoes@pluranimity.org> Date: Wed, 13 Feb 2019 17:26:14 +0100 Subject: [PATCH 07/20] Address @alexanderbez comments --- crypto/keys/mintkey/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crypto/keys/mintkey/README.md b/crypto/keys/mintkey/README.md index ca3d4c21cf..5180e50bd0 100644 --- a/crypto/keys/mintkey/README.md +++ b/crypto/keys/mintkey/README.md @@ -5,7 +5,7 @@ The present Bcrypt security parameter used is 12, which should take about a quar For some background into security parameter considerations, see [here](https://auth0.com/blog/hashing-in-action-understanding-bcrypt/) and [here](https://security.stackexchange.com/questions/3959/recommended-of-iterations-when-using-pkbdf2-sha256/3993#3993). -Given our security model, where an attacker would need to already have access to a victim's computer and copy the `~/.gaiacli` directory (as opposed to e.g. web authentication), this parameter choice seems sufficient for the time being. +Given our security model, where an attacker would need to already have access to a victim's computer and copy the `~/.gaiacli` directory (as opposed to e.g. web authentication), this parameter choice seems sufficient for the time being. Bcrypt always generates a 448-bit key, so the security in practice is determined by the length & complexity of a user's password and the time taken to generate a Bcrypt key from their password (which we can choose with the security parameter). Users would be well-advised to use difficult-to-guess passwords. Benchmarking ------------ @@ -13,7 +13,7 @@ Benchmarking To run Bcrypt benchmarks: ```bash -go test -bench . +go test -v --bench github.com/cosmos/cosmos-sdk/crypto/keys/mintkey ``` On the test machine (midrange ThinkPad; i7 6600U), this results in: From 787f46546d40ba7c57be59bf95371870d84ad06a Mon Sep 17 00:00:00 2001 From: Juan Leni <juan.leni@zondax.ch> Date: Wed, 13 Feb 2019 18:53:16 +0100 Subject: [PATCH 08/20] Merge PR #3620: Indicate build flags in version --- Makefile | 9 +++++---- PENDING.md | 3 +++ docs/gaia/installation.md | 23 +++++++++++++++++++++-- version/version.go | 12 +++++++++--- 4 files changed, 38 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index b8cdbbed85..0b8c041a9d 100644 --- a/Makefile +++ b/Makefile @@ -4,10 +4,11 @@ VERSION := $(shell echo $(shell git describe --tags) | sed 's/^v//') COMMIT := $(shell git log -1 --format='%H') BUILD_TAGS = netgo CAT := $(if $(filter $(OS),Windows_NT),type,cat) -BUILD_FLAGS = -tags "${BUILD_TAGS}" -ldflags \ - "-X github.com/cosmos/cosmos-sdk/version.Version=${VERSION} \ - -X github.com/cosmos/cosmos-sdk/version.Commit=${COMMIT} \ - -X github.com/cosmos/cosmos-sdk/version.VendorDirHash=$(shell $(CAT) vendor-deps)" +BUILD_FLAGS = -tags "$(BUILD_TAGS)" -ldflags \ + '-X github.com/cosmos/cosmos-sdk/version.Version=$(VERSION) \ + -X github.com/cosmos/cosmos-sdk/version.Commit=$(COMMIT) \ + -X github.com/cosmos/cosmos-sdk/version.VendorDirHash=$(shell $(CAT) vendor-deps) \ + -X "github.com/cosmos/cosmos-sdk/version.BuildTags=$(BUILD_TAGS)"' LEDGER_ENABLED ?= true GOTOOLS = \ github.com/golang/dep/cmd/dep \ diff --git a/PENDING.md b/PENDING.md index 30f1048c52..c370c0a96e 100644 --- a/PENDING.md +++ b/PENDING.md @@ -34,6 +34,9 @@ IMPROVEMENTS * Gaia * SDK + * [\#3604] Improve SDK funds related error messages and allow for unicode in + JSON ABCI log. + * [\#3620](https://github.com/cosmos/cosmos-sdk/pull/3620) Version command shows build tags * \#3638 Add Bcrypt benchmarks & justification of security parameter choice diff --git a/docs/gaia/installation.md b/docs/gaia/installation.md index 84b4f92697..af27917505 100644 --- a/docs/gaia/installation.md +++ b/docs/gaia/installation.md @@ -36,10 +36,29 @@ make tools install That will install the `gaiad` and `gaiacli` binaries. Verify that everything is OK: ```bash -$ gaiad version -$ gaiacli version +$ gaiad version --long +$ gaiacli version --long ``` +`gaiacli` for instance should output something similar to: + +``` +cosmos-sdk: 0.31.2-10-g1fba7308 +git commit: 1fba7308fa226e971964cd6baad9527d4b51d9fc +vendor hash: 1aec7edfad9888a967b3e9063e42f66b28f447e6 +build tags: netgo ledger +go version go1.11.5 linux/amd64 +``` + +##### Build Tags + +Build tags indicate special features that have been enabled in the binary. + +| Build Tag | Description | +| --------- | ----------------------------------------------- | +| netgo | Name resolution will use pure Go code | +| ledger | Ledger devices are supported (hardware wallets) | + ### Next Now you can [join the public testnet](./join-testnet.md) or [create you own testnet](./deploy-testnet.md) diff --git a/version/version.go b/version/version.go index 6affcfbd49..0b2c09985a 100644 --- a/version/version.go +++ b/version/version.go @@ -11,12 +11,14 @@ var ( Commit = "" Version = "" VendorDirHash = "" + BuildTags = "" ) type versionInfo struct { CosmosSDK string `json:"cosmos_sdk"` GitCommit string `json:"commit"` VendorDirHash string `json:"vendor_hash"` + BuildTags string `json:"build_tags"` GoVersion string `json:"go"` } @@ -24,11 +26,15 @@ func (v versionInfo) String() string { return fmt.Sprintf(`cosmos-sdk: %s git commit: %s vendor hash: %s -%s`, v.CosmosSDK, v.GitCommit, v.VendorDirHash, v.GoVersion) +build tags: %s +%s`, v.CosmosSDK, v.GitCommit, v.VendorDirHash, v.BuildTags, v.GoVersion) } func newVersionInfo() versionInfo { return versionInfo{ - Version, Commit, VendorDirHash, fmt.Sprintf("go version %s %s/%s\n", - runtime.Version(), runtime.GOOS, runtime.GOARCH)} + Version, + Commit, + VendorDirHash, + BuildTags, + fmt.Sprintf("go version %s %s/%s\n", runtime.Version(), runtime.GOOS, runtime.GOARCH)} } From 9e9d64ec69dad9915548ee053d9940bed4f19996 Mon Sep 17 00:00:00 2001 From: gamarin2 <gautier@tendermint.com> Date: Wed, 13 Feb 2019 19:05:03 +0100 Subject: [PATCH 09/20] Merge PR #3637: DOCS: Add readme to specs --- docs/spec/_ics/README.md | 3 +++ docs/spec/_proposals/README.md | 3 +++ docs/spec/addresses/README.md | 3 +++ docs/spec/distribution/{overview.md => README.md} | 0 docs/spec/mint/README.md | 4 ++++ docs/spec/staking/{overview.md => README.md} | 0 6 files changed, 13 insertions(+) create mode 100644 docs/spec/_ics/README.md create mode 100644 docs/spec/_proposals/README.md create mode 100644 docs/spec/addresses/README.md rename docs/spec/distribution/{overview.md => README.md} (100%) create mode 100644 docs/spec/mint/README.md rename docs/spec/staking/{overview.md => README.md} (100%) diff --git a/docs/spec/_ics/README.md b/docs/spec/_ics/README.md new file mode 100644 index 0000000000..00e496000f --- /dev/null +++ b/docs/spec/_ics/README.md @@ -0,0 +1,3 @@ +# Cosmos ICS + +- [ICS030 - Signed Messages](./ics-030-signed-messages.md) \ No newline at end of file diff --git a/docs/spec/_proposals/README.md b/docs/spec/_proposals/README.md new file mode 100644 index 0000000000..213d6288cb --- /dev/null +++ b/docs/spec/_proposals/README.md @@ -0,0 +1,3 @@ +# Spec Proposals + +- [F1 Fee Distribution](./f1-fee-distribution/f1_fee_distr.pdf) \ No newline at end of file diff --git a/docs/spec/addresses/README.md b/docs/spec/addresses/README.md new file mode 100644 index 0000000000..fb7aa15bcd --- /dev/null +++ b/docs/spec/addresses/README.md @@ -0,0 +1,3 @@ +# Addresses spec + +- [Bech32](./bech32.md) \ No newline at end of file diff --git a/docs/spec/distribution/overview.md b/docs/spec/distribution/README.md similarity index 100% rename from docs/spec/distribution/overview.md rename to docs/spec/distribution/README.md diff --git a/docs/spec/mint/README.md b/docs/spec/mint/README.md new file mode 100644 index 0000000000..085986b374 --- /dev/null +++ b/docs/spec/mint/README.md @@ -0,0 +1,4 @@ +# Mint Specification + +- [State](./state.md) +- [Begin Block](./begin_block.md) \ No newline at end of file diff --git a/docs/spec/staking/overview.md b/docs/spec/staking/README.md similarity index 100% rename from docs/spec/staking/overview.md rename to docs/spec/staking/README.md From dafe0acf4ff53c2af49dad64f96c9a13ed036a4f Mon Sep 17 00:00:00 2001 From: Alexander Bezobchuk <alexanderbez@users.noreply.github.com> Date: Wed, 13 Feb 2019 15:40:34 -0500 Subject: [PATCH 10/20] Merge PR #3606: JSON-stringify ABCI Log w/ Msg Indexes --- PENDING.md | 5 +++-- baseapp/baseapp.go | 21 ++++++++++++++++----- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/PENDING.md b/PENDING.md index c370c0a96e..0012b26f50 100644 --- a/PENDING.md +++ b/PENDING.md @@ -34,11 +34,12 @@ IMPROVEMENTS * Gaia * SDK + * [\#3601] JSON-stringify the ABCI log response which includes the log and message + index. * [\#3604] Improve SDK funds related error messages and allow for unicode in JSON ABCI log. * [\#3620](https://github.com/cosmos/cosmos-sdk/pull/3620) Version command shows build tags - - * \#3638 Add Bcrypt benchmarks & justification of security parameter choice + * [\#3638] Add Bcrypt benchmarks & justification of security parameter choice * Tendermint * [\#3618] Upgrade to Tendermint 0.30.03 diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index c7f7cda868..3b61342c8b 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -628,9 +628,15 @@ func (app *BaseApp) getContextForTx(mode runTxMode, txBytes []byte) (ctx sdk.Con return } +type indexedABCILog struct { + MsgIndex int `json:"msg_index"` + Success bool `json:"success"` + Log string `json:"log"` +} + // runMsgs iterates through all the messages and executes them. func (app *BaseApp) runMsgs(ctx sdk.Context, msgs []sdk.Msg, mode runTxMode) (result sdk.Result) { - logs := make([]string, 0, len(msgs)) + idxlogs := make([]indexedABCILog, 0, len(msgs)) // a list of JSON-encoded logs with msg index var data []byte // NOTE: we just append them all (?!) var tags sdk.Tags // also just append them all @@ -659,23 +665,28 @@ func (app *BaseApp) runMsgs(ctx sdk.Context, msgs []sdk.Msg, mode runTxMode) (re tags = append(tags, sdk.MakeTag(sdk.TagAction, msg.Type())) tags = append(tags, msgResult.Tags...) + idxLog := indexedABCILog{MsgIndex: msgIdx, Log: msgResult.Log} + // stop execution and return on first failed message if !msgResult.IsOK() { - logs = append(logs, fmt.Sprintf("Msg %d failed: %s", msgIdx, msgResult.Log)) + idxLog.Success = false + idxlogs = append(idxlogs, idxLog) + code = msgResult.Code codespace = msgResult.Codespace break } - // construct usable logs in multi-message transactions - logs = append(logs, fmt.Sprintf("Msg %d: %s", msgIdx, msgResult.Log)) + idxLog.Success = true + idxlogs = append(idxlogs, idxLog) } + logJSON := codec.Cdc.MustMarshalJSON(idxlogs) result = sdk.Result{ Code: code, Codespace: codespace, Data: data, - Log: strings.Join(logs, "\n"), + Log: strings.TrimSpace(string(logJSON)), GasUsed: ctx.GasMeter().GasConsumed(), Tags: tags, } From d66db6a7724a87e466dacdcbe7df5c7ba9c94f26 Mon Sep 17 00:00:00 2001 From: frog power 4000 <rigel.rozanski@gmail.com> Date: Wed, 13 Feb 2019 18:01:50 -0500 Subject: [PATCH 11/20] Merge PR #3621: module inter-dependency cleanup --- CHANGELOG.md | 2 +- PENDING.md | 2 + client/lcd/lcd_test.go | 70 ++++++------ client/lcd/test_helpers.go | 22 ++-- cmd/gaia/app/app.go | 2 +- cmd/gaia/app/genesis.go | 6 +- cmd/gaia/app/genesis_test.go | 2 +- cmd/gaia/app/invariants.go | 8 +- cmd/gaia/app/sim_test.go | 22 ++-- cmd/gaia/cli_test/cli_test.go | 31 +++--- cmd/gaia/cli_test/test_helpers.go | 10 +- cmd/gaia/cmd/gaiadebug/hack.go | 2 +- cmd/gaia/init/gentx.go | 5 +- cmd/gaia/init/testnet.go | 13 +-- types/invariant.go | 10 ++ types/stake.go | 27 ++++- x/auth/client/txbuilder/txbuilder_test.go | 9 +- x/auth/keeper.go | 11 ++ x/bank/simulation/invariants.go | 10 +- x/distribution/keeper/alias_functions.go | 15 +++ x/distribution/keeper/allocation_test.go | 22 ++-- x/distribution/keeper/delegation_test.go | 104 +++++++++--------- x/distribution/keeper/keeper_test.go | 5 +- x/distribution/keeper/querier_test.go | 6 +- x/distribution/keeper/test_common.go | 2 +- x/distribution/simulation/invariants.go | 32 +++--- .../types/{keepers.go => expected_keepers.go} | 5 + x/gov/endblocker_test.go | 13 +-- x/gov/expected_keepers.go | 12 ++ x/gov/genesis.go | 5 +- x/gov/genesis_test.go | 4 +- x/gov/keeper.go | 7 +- x/gov/keeper_test.go | 9 +- x/gov/msgs_test.go | 5 +- x/gov/simulation/invariants.go | 3 +- x/gov/simulation/msgs.go | 5 +- x/gov/tally_test.go | 42 +++---- x/gov/test_common.go | 7 +- x/ibc/expected_keepers.go | 9 ++ x/ibc/handler.go | 7 +- x/mint/params.go | 3 +- x/mock/app.go | 11 -- x/mock/simulation/invariants.go | 35 ------ x/mock/simulation/simulate.go | 16 +-- x/mock/simulation/util.go | 19 +++- x/slashing/app_test.go | 10 +- x/slashing/genesis.go | 5 +- x/slashing/handler_test.go | 7 +- x/slashing/keeper.go | 5 +- x/slashing/keeper_test.go | 21 ++-- x/slashing/keys.go | 3 +- x/slashing/simulation/invariants.go | 3 +- x/slashing/simulation/msgs.go | 5 +- x/slashing/test_common.go | 8 +- x/slashing/tick_test.go | 3 +- x/staking/alias.go | 8 +- x/staking/app_test.go | 10 +- x/staking/genesis.go | 8 +- x/staking/genesis_test.go | 12 +- x/staking/handler_test.go | 58 +++++----- .../{sdk_types.go => alias_functions.go} | 14 +++ x/staking/keeper/delegation_test.go | 66 +++++------ x/staking/keeper/keeper.go | 7 +- x/staking/keeper/slash.go | 2 +- x/staking/keeper/slash_test.go | 36 +++--- x/staking/keeper/test_common.go | 2 +- x/staking/keeper/validator_test.go | 78 ++++++------- x/staking/querier/querier_test.go | 10 +- x/staking/simulation/invariants.go | 27 ++--- x/staking/test_common.go | 10 +- x/staking/types/expected_keepers.go | 20 ++++ x/staking/types/genesis.go | 14 +-- x/staking/types/msg_test.go | 4 +- x/staking/types/params.go | 13 +-- x/staking/types/validator.go | 25 ++--- 75 files changed, 605 insertions(+), 556 deletions(-) create mode 100644 types/invariant.go create mode 100644 x/distribution/keeper/alias_functions.go rename x/distribution/types/{keepers.go => expected_keepers.go} (84%) create mode 100644 x/gov/expected_keepers.go create mode 100644 x/ibc/expected_keepers.go delete mode 100644 x/mock/simulation/invariants.go rename x/staking/keeper/{sdk_types.go => alias_functions.go} (89%) create mode 100644 x/staking/types/expected_keepers.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 7fd480a797..7b702ac57c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -527,7 +527,7 @@ BREAKING CHANGES * [gaiad init] [\#2602](https://github.com/cosmos/cosmos-sdk/issues/2602) New genesis workflow * SDK - * [simulation] [\#2665](https://github.com/cosmos/cosmos-sdk/issues/2665) only argument to simulation.Invariant is now app + * [simulation] [\#2665](https://github.com/cosmos/cosmos-sdk/issues/2665) only argument to sdk.Invariant is now app * Tendermint * Upgrade to version 0.26.0 diff --git a/PENDING.md b/PENDING.md index 0012b26f50..3c563a90b5 100644 --- a/PENDING.md +++ b/PENDING.md @@ -9,6 +9,7 @@ BREAKING CHANGES * Gaia * SDK + * \#3621 staking.GenesisState.Bonds -> Delegations * Tendermint @@ -34,6 +35,7 @@ IMPROVEMENTS * Gaia * SDK + * \#3621 remove many inter-module dependancies * [\#3601] JSON-stringify the ABCI log response which includes the log and message index. * [\#3604] Improve SDK funds related error messages and allow for unicode in diff --git a/client/lcd/lcd_test.go b/client/lcd/lcd_test.go index 56dd65d3e4..6cdaf03318 100644 --- a/client/lcd/lcd_test.go +++ b/client/lcd/lcd_test.go @@ -40,7 +40,7 @@ const ( altPw = "12345678901" ) -var fees = sdk.Coins{sdk.NewInt64Coin(staking.DefaultBondDenom, 5)} +var fees = sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 5)} func init() { mintkey.BcryptSecurityParameter = 1 @@ -243,14 +243,14 @@ func TestCoinSend(t *testing.T) { coins := acc.GetCoins() expectedBalance := initialBalance[0].Minus(fees[0]) - require.Equal(t, staking.DefaultBondDenom, coins[0].Denom) + require.Equal(t, sdk.DefaultBondDenom, coins[0].Denom) require.Equal(t, expectedBalance.Amount.SubRaw(1), coins[0].Amount) expectedBalance = coins[0] // query receiver acc2 := getAccount(t, port, receiveAddr) coins2 := acc2.GetCoins() - require.Equal(t, staking.DefaultBondDenom, coins2[0].Denom) + require.Equal(t, sdk.DefaultBondDenom, coins2[0].Denom) require.Equal(t, int64(1), coins2[0].Amount.Int64()) // test failure with too little gas @@ -286,7 +286,7 @@ func TestCoinSend(t *testing.T) { require.NotZero(t, gasEstResp.GasEstimate) acc = getAccount(t, port, addr) - require.Equal(t, expectedBalance.Amount, acc.GetCoins().AmountOf(staking.DefaultBondDenom)) + require.Equal(t, expectedBalance.Amount, acc.GetCoins().AmountOf(sdk.DefaultBondDenom)) // run successful tx gas := fmt.Sprintf("%d", gasEstResp.GasEstimate) @@ -301,7 +301,7 @@ func TestCoinSend(t *testing.T) { acc = getAccount(t, port, addr) expectedBalance = expectedBalance.Minus(fees[0]) - require.Equal(t, expectedBalance.Amount.SubRaw(1), acc.GetCoins().AmountOf(staking.DefaultBondDenom)) + require.Equal(t, expectedBalance.Amount.SubRaw(1), acc.GetCoins().AmountOf(sdk.DefaultBondDenom)) } func TestCoinSendAccAuto(t *testing.T) { @@ -323,7 +323,7 @@ func TestCoinSendAccAuto(t *testing.T) { coins := acc.GetCoins() expectedBalance := initialBalance[0].Minus(fees[0]) - require.Equal(t, staking.DefaultBondDenom, coins[0].Denom) + require.Equal(t, sdk.DefaultBondDenom, coins[0].Denom) require.Equal(t, expectedBalance.Amount.SubRaw(1), coins[0].Amount) } @@ -520,11 +520,11 @@ func TestPoolParamsQuery(t *testing.T) { pool := getStakingPool(t, port) initialPool := staking.InitialPool() - tokens := staking.TokensFromTendermintPower(100) - freeFermions := staking.TokensFromTendermintPower(50) + tokens := sdk.TokensFromTendermintPower(100) + freeTokens := sdk.TokensFromTendermintPower(50) initialPool.NotBondedTokens = initialPool.NotBondedTokens.Add(tokens) - initialPool.BondedTokens = initialPool.BondedTokens.Add(tokens) // Delegate tx on GaiaAppGenState - initialPool.NotBondedTokens = initialPool.NotBondedTokens.Add(freeFermions) // freeFermionsAcc = 50 on GaiaAppGenState + initialPool.BondedTokens = initialPool.BondedTokens.Add(tokens) // Delegate tx on GaiaAppGenState + initialPool.NotBondedTokens = initialPool.NotBondedTokens.Add(freeTokens) // freeTokensPerAcc = 50 on GaiaAppGenState require.Equal(t, initialPool.BondedTokens, pool.BondedTokens) @@ -575,7 +575,7 @@ func TestBonding(t *testing.T) { require.Equal(t, 2, len(valPubKeys)) require.Equal(t, 2, len(operAddrs)) - amt := staking.TokensFromTendermintPower(60) + amt := sdk.TokensFromTendermintPower(60) amtDec := sdk.NewDecFromInt(amt) validator := getValidator(t, port, operAddrs[0]) @@ -583,7 +583,7 @@ func TestBonding(t *testing.T) { initialBalance := acc.GetCoins() // create bond TX - delTokens := staking.TokensFromTendermintPower(60) + delTokens := sdk.TokensFromTendermintPower(60) resultTx := doDelegate(t, port, name1, pw, addr, operAddrs[0], delTokens, fees) tests.WaitForHeight(resultTx.Height+1, port) @@ -601,7 +601,7 @@ func TestBonding(t *testing.T) { acc = getAccount(t, port, addr) coins := acc.GetCoins() expectedBalance := initialBalance[0].Minus(fees[0]) - require.Equal(t, expectedBalance.Amount.Sub(delTokens), coins.AmountOf(staking.DefaultBondDenom)) + require.Equal(t, expectedBalance.Amount.Sub(delTokens), coins.AmountOf(sdk.DefaultBondDenom)) expectedBalance = coins[0] // query delegation @@ -625,7 +625,7 @@ func TestBonding(t *testing.T) { require.Equal(t, operAddrs[0], bondedValidator.OperatorAddr) // testing unbonding - unbondingTokens := staking.TokensFromTendermintPower(30) + unbondingTokens := sdk.TokensFromTendermintPower(30) resultTx = doUndelegate(t, port, name1, pw, addr, operAddrs[0], unbondingTokens, fees) tests.WaitForHeight(resultTx.Height+1, port) @@ -636,8 +636,8 @@ func TestBonding(t *testing.T) { coins = acc.GetCoins() expectedBalance = expectedBalance.Minus(fees[0]) require.True(t, - expectedBalance.Amount.LT(coins.AmountOf(staking.DefaultBondDenom)) || - expectedBalance.Amount.Equal(coins.AmountOf(staking.DefaultBondDenom)), + expectedBalance.Amount.LT(coins.AmountOf(sdk.DefaultBondDenom)) || + expectedBalance.Amount.Equal(coins.AmountOf(sdk.DefaultBondDenom)), "should get tokens back from automatic withdrawal after an unbonding delegation", ) expectedBalance = coins[0] @@ -655,7 +655,7 @@ func TestBonding(t *testing.T) { require.Equal(t, delTokens.DivRaw(2), ubd.Entries[0].Balance) // test redelegation - rdTokens := staking.TokensFromTendermintPower(30) + rdTokens := sdk.TokensFromTendermintPower(30) resultTx = doBeginRedelegation(t, port, name1, pw, addr, operAddrs[0], operAddrs[1], rdTokens, fees) tests.WaitForHeight(resultTx.Height+1, port) @@ -665,8 +665,8 @@ func TestBonding(t *testing.T) { acc = getAccount(t, port, addr) expectedBalance = expectedBalance.Minus(fees[0]) require.True(t, - expectedBalance.Amount.LT(coins.AmountOf(staking.DefaultBondDenom)) || - expectedBalance.Amount.Equal(coins.AmountOf(staking.DefaultBondDenom)), + expectedBalance.Amount.LT(coins.AmountOf(sdk.DefaultBondDenom)) || + expectedBalance.Amount.Equal(coins.AmountOf(sdk.DefaultBondDenom)), "should get tokens back from automatic withdrawal after an unbonding delegation", ) @@ -735,7 +735,7 @@ func TestSubmitProposal(t *testing.T) { initialBalance := acc.GetCoins() // create SubmitProposal TX - proposalTokens := staking.TokensFromTendermintPower(5) + proposalTokens := sdk.TokensFromTendermintPower(5) resultTx := doSubmitProposal(t, port, seed, name1, pw, addr, proposalTokens, fees) tests.WaitForHeight(resultTx.Height+1, port) @@ -748,7 +748,7 @@ func TestSubmitProposal(t *testing.T) { // verify balance acc = getAccount(t, port, addr) expectedBalance := initialBalance[0].Minus(fees[0]) - require.Equal(t, expectedBalance.Amount.Sub(proposalTokens), acc.GetCoins().AmountOf(staking.DefaultBondDenom)) + require.Equal(t, expectedBalance.Amount.Sub(proposalTokens), acc.GetCoins().AmountOf(sdk.DefaultBondDenom)) // query proposal proposal := getProposal(t, port, proposalID) @@ -770,7 +770,7 @@ func TestDeposit(t *testing.T) { initialBalance := acc.GetCoins() // create SubmitProposal TX - proposalTokens := staking.TokensFromTendermintPower(5) + proposalTokens := sdk.TokensFromTendermintPower(5) resultTx := doSubmitProposal(t, port, seed, name1, pw, addr, proposalTokens, fees) tests.WaitForHeight(resultTx.Height+1, port) @@ -784,7 +784,7 @@ func TestDeposit(t *testing.T) { acc = getAccount(t, port, addr) coins := acc.GetCoins() expectedBalance := initialBalance[0].Minus(fees[0]) - require.Equal(t, expectedBalance.Amount.Sub(proposalTokens), coins.AmountOf(staking.DefaultBondDenom)) + require.Equal(t, expectedBalance.Amount.Sub(proposalTokens), coins.AmountOf(sdk.DefaultBondDenom)) expectedBalance = coins[0] // query proposal @@ -792,14 +792,14 @@ func TestDeposit(t *testing.T) { require.Equal(t, "Test", proposal.GetTitle()) // create SubmitProposal TX - depositTokens := staking.TokensFromTendermintPower(5) + depositTokens := sdk.TokensFromTendermintPower(5) resultTx = doDeposit(t, port, seed, name1, pw, addr, proposalID, depositTokens, fees) tests.WaitForHeight(resultTx.Height+1, port) // verify balance after deposit and fee acc = getAccount(t, port, addr) expectedBalance = expectedBalance.Minus(fees[0]) - require.Equal(t, expectedBalance.Amount.Sub(depositTokens), acc.GetCoins().AmountOf(staking.DefaultBondDenom)) + require.Equal(t, expectedBalance.Amount.Sub(depositTokens), acc.GetCoins().AmountOf(sdk.DefaultBondDenom)) // query tx txs := getTransactions(t, port, fmt.Sprintf("action=deposit&depositor=%s", addr)) @@ -807,7 +807,7 @@ func TestDeposit(t *testing.T) { require.Equal(t, resultTx.Height, txs[0].Height) // query proposal - totalCoins := sdk.Coins{sdk.NewCoin(staking.DefaultBondDenom, staking.TokensFromTendermintPower(10))} + totalCoins := sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, sdk.TokensFromTendermintPower(10))} proposal = getProposal(t, port, proposalID) require.True(t, proposal.GetTotalDeposit().IsEqual(totalCoins)) @@ -827,7 +827,7 @@ func TestVote(t *testing.T) { initialBalance := acc.GetCoins() // create SubmitProposal TX - proposalTokens := staking.TokensFromTendermintPower(10) + proposalTokens := sdk.TokensFromTendermintPower(10) resultTx := doSubmitProposal(t, port, seed, name1, pw, addr, proposalTokens, fees) tests.WaitForHeight(resultTx.Height+1, port) @@ -841,7 +841,7 @@ func TestVote(t *testing.T) { acc = getAccount(t, port, addr) coins := acc.GetCoins() expectedBalance := initialBalance[0].Minus(fees[0]) - require.Equal(t, expectedBalance.Amount.Sub(proposalTokens), coins.AmountOf(staking.DefaultBondDenom)) + require.Equal(t, expectedBalance.Amount.Sub(proposalTokens), coins.AmountOf(sdk.DefaultBondDenom)) expectedBalance = coins[0] // query proposal @@ -857,7 +857,7 @@ func TestVote(t *testing.T) { acc = getAccount(t, port, addr) coins = acc.GetCoins() expectedBalance = expectedBalance.Minus(fees[0]) - require.Equal(t, expectedBalance.Amount, coins.AmountOf(staking.DefaultBondDenom)) + require.Equal(t, expectedBalance.Amount, coins.AmountOf(sdk.DefaultBondDenom)) expectedBalance = coins[0] // query tx @@ -873,7 +873,7 @@ func TestVote(t *testing.T) { require.Equal(t, sdk.ZeroInt(), tally.Yes, "tally should be 0 as the address is not bonded") // create bond TX - delTokens := staking.TokensFromTendermintPower(60) + delTokens := sdk.TokensFromTendermintPower(60) resultTx = doDelegate(t, port, name1, pw, addr, operAddrs[0], delTokens, fees) tests.WaitForHeight(resultTx.Height+1, port) @@ -881,7 +881,7 @@ func TestVote(t *testing.T) { acc = getAccount(t, port, addr) coins = acc.GetCoins() expectedBalance = expectedBalance.Minus(fees[0]) - require.Equal(t, expectedBalance.Amount.Sub(delTokens), coins.AmountOf(staking.DefaultBondDenom)) + require.Equal(t, expectedBalance.Amount.Sub(delTokens), coins.AmountOf(sdk.DefaultBondDenom)) expectedBalance = coins[0] tally = getTally(t, port, proposalID) @@ -894,7 +894,7 @@ func TestVote(t *testing.T) { // verify balance acc = getAccount(t, port, addr) expectedBalance = expectedBalance.Minus(fees[0]) - require.Equal(t, expectedBalance.Amount, acc.GetCoins().AmountOf(staking.DefaultBondDenom)) + require.Equal(t, expectedBalance.Amount, acc.GetCoins().AmountOf(sdk.DefaultBondDenom)) tally = getTally(t, port, proposalID) require.Equal(t, sdk.ZeroInt(), tally.Yes, "tally should be 0 the user changed the option") @@ -927,7 +927,7 @@ func TestProposalsQuery(t *testing.T) { defer cleanup() depositParam := getDepositParam(t, port) - halfMinDeposit := depositParam.MinDeposit.AmountOf(staking.DefaultBondDenom).DivRaw(2) + halfMinDeposit := depositParam.MinDeposit.AmountOf(sdk.DefaultBondDenom).DivRaw(2) getVotingParam(t, port) getTallyingParam(t, port) @@ -974,7 +974,7 @@ func TestProposalsQuery(t *testing.T) { require.Equal(t, deposit, deposits[0]) // increasing the amount of the deposit should update the existing one - depositTokens := staking.TokensFromTendermintPower(1) + depositTokens := sdk.TokensFromTendermintPower(1) resultTx = doDeposit(t, port, seeds[0], names[0], passwords[0], addrs[0], proposalID1, depositTokens, fees) tests.WaitForHeight(resultTx.Height+1, port) @@ -1085,7 +1085,7 @@ func TestDistributionFlow(t *testing.T) { require.Equal(t, valDistInfo.OperatorAddress.String(), sdk.AccAddress(valAddr).String()) // Delegate some coins - delTokens := staking.TokensFromTendermintPower(60) + delTokens := sdk.TokensFromTendermintPower(60) resultTx := doDelegate(t, port, name1, pw, addr, valAddr, delTokens, fees) tests.WaitForHeight(resultTx.Height+1, port) require.Equal(t, uint32(0), resultTx.Code) diff --git a/client/lcd/test_helpers.go b/client/lcd/test_helpers.go index ae126ef1d5..ede3b4cfdb 100644 --- a/client/lcd/test_helpers.go +++ b/client/lcd/test_helpers.go @@ -230,12 +230,12 @@ func InitializeTestLCD(t *testing.T, nValidators int, initAddrs []sdk.AccAddress pubKey = ed25519.GenPrivKey().PubKey() power = 1 } - startTokens := staking.TokensFromTendermintPower(power) + startTokens := sdk.TokensFromTendermintPower(power) msg := staking.NewMsgCreateValidator( sdk.ValAddress(operAddr), pubKey, - sdk.NewCoin(staking.DefaultBondDenom, startTokens), + sdk.NewCoin(sdk.DefaultBondDenom, startTokens), staking.NewDescription(fmt.Sprintf("validator-%d", i+1), "", "", ""), staking.NewCommissionMsg(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()), sdk.OneInt(), @@ -255,8 +255,8 @@ func InitializeTestLCD(t *testing.T, nValidators int, initAddrs []sdk.AccAddress valOperAddrs = append(valOperAddrs, sdk.ValAddress(operAddr)) accAuth := auth.NewBaseAccountWithAddress(sdk.AccAddress(operAddr)) - accTokens := staking.TokensFromTendermintPower(150) - accAuth.Coins = sdk.Coins{sdk.NewCoin(staking.DefaultBondDenom, accTokens)} + accTokens := sdk.TokensFromTendermintPower(150) + accAuth.Coins = sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, accTokens)} accs = append(accs, gapp.NewGenesisAccount(&accAuth)) } @@ -270,8 +270,8 @@ func InitializeTestLCD(t *testing.T, nValidators int, initAddrs []sdk.AccAddress // add some tokens to init accounts for _, addr := range initAddrs { accAuth := auth.NewBaseAccountWithAddress(addr) - accTokens := staking.TokensFromTendermintPower(100) - accAuth.Coins = sdk.Coins{sdk.NewCoin(staking.DefaultBondDenom, accTokens)} + accTokens := sdk.TokensFromTendermintPower(100) + accAuth.Coins = sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, accTokens)} acc := gapp.NewGenesisAccount(&accAuth) genesisState.Accounts = append(genesisState.Accounts, acc) genesisState.StakingData.Pool.NotBondedTokens = genesisState.StakingData.Pool.NotBondedTokens.Add(accTokens) @@ -707,7 +707,7 @@ func doTransferWithGas( ) sr := rest.SendReq{ - Amount: sdk.Coins{sdk.NewInt64Coin(staking.DefaultBondDenom, 1)}, + Amount: sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 1)}, BaseReq: baseReq, } @@ -740,7 +740,7 @@ func doTransferWithGasAccAuto( ) sr := rest.SendReq{ - Amount: sdk.Coins{sdk.NewInt64Coin(staking.DefaultBondDenom, 1)}, + Amount: sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 1)}, BaseReq: baseReq, } @@ -773,7 +773,7 @@ func doDelegate(t *testing.T, port, name, password string, BaseReq: baseReq, DelegatorAddr: delAddr, ValidatorAddr: valAddr, - Delegation: sdk.NewCoin(staking.DefaultBondDenom, amount), + Delegation: sdk.NewCoin(sdk.DefaultBondDenom, amount), } req, err := cdc.MarshalJSON(msg) require.NoError(t, err) @@ -1079,7 +1079,7 @@ func doSubmitProposal(t *testing.T, port, seed, name, password string, proposerA Description: "test", ProposalType: "Text", Proposer: proposerAddr, - InitialDeposit: sdk.Coins{sdk.NewCoin(staking.DefaultBondDenom, amount)}, + InitialDeposit: sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, amount)}, BaseReq: baseReq, } @@ -1173,7 +1173,7 @@ func doDeposit(t *testing.T, port, seed, name, password string, proposerAddr sdk dr := rest.DepositReq{ Depositor: proposerAddr, - Amount: sdk.Coins{sdk.NewCoin(staking.DefaultBondDenom, amount)}, + Amount: sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, amount)}, BaseReq: baseReq, } diff --git a/cmd/gaia/app/app.go b/cmd/gaia/app/app.go index a84f179a4f..096d68ba56 100644 --- a/cmd/gaia/app/app.go +++ b/cmd/gaia/app/app.go @@ -254,7 +254,7 @@ func (app *GaiaApp) initFromGenesisState(ctx sdk.Context, genesisState GenesisSt // initialize module-specific stores auth.InitGenesis(ctx, app.accountKeeper, app.feeCollectionKeeper, genesisState.AuthData) bank.InitGenesis(ctx, app.bankKeeper, genesisState.BankData) - slashing.InitGenesis(ctx, app.slashingKeeper, genesisState.SlashingData, genesisState.StakingData) + slashing.InitGenesis(ctx, app.slashingKeeper, genesisState.SlashingData, genesisState.StakingData.Validators.ToSDKValidators()) gov.InitGenesis(ctx, app.govKeeper, genesisState.GovData) mint.InitGenesis(ctx, app.mintKeeper, genesisState.MintData) diff --git a/cmd/gaia/app/genesis.go b/cmd/gaia/app/genesis.go index 2cf3e3cba9..3938c9dce9 100644 --- a/cmd/gaia/app/genesis.go +++ b/cmd/gaia/app/genesis.go @@ -27,8 +27,8 @@ import ( var ( // bonded tokens given to genesis validators/accounts - freeFermionsAcc = staking.TokensFromTendermintPower(150) - defaultBondDenom = staking.DefaultBondDenom + freeTokensPerAcc = sdk.TokensFromTendermintPower(150) + defaultBondDenom = sdk.DefaultBondDenom ) // State to Unmarshal @@ -401,7 +401,7 @@ func NewDefaultGenesisAccount(addr sdk.AccAddress) GenesisAccount { accAuth := auth.NewBaseAccountWithAddress(addr) coins := sdk.Coins{ sdk.NewCoin("footoken", sdk.NewInt(1000)), - sdk.NewCoin(defaultBondDenom, freeFermionsAcc), + sdk.NewCoin(defaultBondDenom, freeTokensPerAcc), } coins.Sort() diff --git a/cmd/gaia/app/genesis_test.go b/cmd/gaia/app/genesis_test.go index cbbad1ee73..0583470699 100644 --- a/cmd/gaia/app/genesis_test.go +++ b/cmd/gaia/app/genesis_test.go @@ -151,7 +151,7 @@ func TestNewDefaultGenesisAccount(t *testing.T) { addr := secp256k1.GenPrivKeySecp256k1([]byte("")).PubKey().Address() acc := NewDefaultGenesisAccount(sdk.AccAddress(addr)) require.Equal(t, sdk.NewInt(1000), acc.Coins.AmountOf("footoken")) - require.Equal(t, staking.TokensFromTendermintPower(150), acc.Coins.AmountOf(defaultBondDenom)) + require.Equal(t, sdk.TokensFromTendermintPower(150), acc.Coins.AmountOf(defaultBondDenom)) } func TestGenesisStateSanitize(t *testing.T) { diff --git a/cmd/gaia/app/invariants.go b/cmd/gaia/app/invariants.go index 6b98edb6ad..535cbff371 100644 --- a/cmd/gaia/app/invariants.go +++ b/cmd/gaia/app/invariants.go @@ -9,16 +9,14 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" banksim "github.com/cosmos/cosmos-sdk/x/bank/simulation" distrsim "github.com/cosmos/cosmos-sdk/x/distribution/simulation" - "github.com/cosmos/cosmos-sdk/x/mock/simulation" stakingsim "github.com/cosmos/cosmos-sdk/x/staking/simulation" ) -func (app *GaiaApp) runtimeInvariants() []simulation.Invariant { - return []simulation.Invariant{ +func (app *GaiaApp) runtimeInvariants() []sdk.Invariant { + return []sdk.Invariant{ banksim.NonnegativeBalanceInvariant(app.accountKeeper), distrsim.NonNegativeOutstandingInvariant(app.distrKeeper), - stakingsim.SupplyInvariants(app.bankKeeper, app.stakingKeeper, - app.feeCollectionKeeper, app.distrKeeper, app.accountKeeper), + stakingsim.SupplyInvariants(app.stakingKeeper, app.feeCollectionKeeper, app.distrKeeper, app.accountKeeper), stakingsim.NonNegativePowerInvariant(app.stakingKeeper), } } diff --git a/cmd/gaia/app/sim_test.go b/cmd/gaia/app/sim_test.go index 90b1785b1d..7e4d465fe6 100644 --- a/cmd/gaia/app/sim_test.go +++ b/cmd/gaia/app/sim_test.go @@ -97,7 +97,7 @@ func appStateRandomizedFn(r *rand.Rand, accs []simulation.Account, genesisTimest // randomly generate some genesis accounts for i, acc := range accs { - coins := sdk.Coins{sdk.NewCoin(staking.DefaultBondDenom, sdk.NewInt(amount))} + coins := sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(amount))} bacc := auth.NewBaseAccountWithAddress(acc.Address) bacc.SetCoins(coins) @@ -154,7 +154,7 @@ func appStateRandomizedFn(r *rand.Rand, accs []simulation.Account, genesisTimest govGenesis := gov.GenesisState{ StartingProposalID: uint64(r.Intn(100)), DepositParams: gov.DepositParams{ - MinDeposit: sdk.Coins{sdk.NewInt64Coin(staking.DefaultBondDenom, int64(r.Intn(1e3)))}, + MinDeposit: sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, int64(r.Intn(1e3)))}, MaxDepositPeriod: vp, }, VotingParams: gov.VotingParams{ @@ -173,7 +173,7 @@ func appStateRandomizedFn(r *rand.Rand, accs []simulation.Account, genesisTimest Params: staking.Params{ UnbondingTime: time.Duration(randIntBetween(r, 60, 60*60*24*3*2)) * time.Second, MaxValidators: uint16(r.Intn(250)), - BondDenom: staking.DefaultBondDenom, + BondDenom: sdk.DefaultBondDenom, }, } fmt.Printf("Selected randomly generated staking parameters:\n\t%+v\n", stakingGenesis) @@ -194,7 +194,7 @@ func appStateRandomizedFn(r *rand.Rand, accs []simulation.Account, genesisTimest Minter: mint.InitialMinter( sdk.NewDecWithPrec(int64(r.Intn(99)), 2)), Params: mint.NewParams( - staking.DefaultBondDenom, + sdk.DefaultBondDenom, sdk.NewDecWithPrec(int64(r.Intn(99)), 2), sdk.NewDecWithPrec(20, 2), sdk.NewDecWithPrec(7, 2), @@ -221,7 +221,7 @@ func appStateRandomizedFn(r *rand.Rand, accs []simulation.Account, genesisTimest stakingGenesis.Pool.NotBondedTokens = sdk.NewInt((amount * numAccs) + (numInitiallyBonded * amount)) stakingGenesis.Validators = validators - stakingGenesis.Bonds = delegations + stakingGenesis.Delegations = delegations distrGenesis := distr.GenesisState{ FeePool: distr.InitialFeePool(), @@ -270,7 +270,7 @@ func testAndRunTxs(app *GaiaApp) []simulation.WeightedOperation { {50, distrsim.SimulateMsgSetWithdrawAddress(app.accountKeeper, app.distrKeeper)}, {50, distrsim.SimulateMsgWithdrawDelegatorReward(app.accountKeeper, app.distrKeeper)}, {50, distrsim.SimulateMsgWithdrawValidatorCommission(app.accountKeeper, app.distrKeeper)}, - {5, govsim.SimulateSubmittingVotingAndSlashingForProposal(app.govKeeper, app.stakingKeeper)}, + {5, govsim.SimulateSubmittingVotingAndSlashingForProposal(app.govKeeper)}, {100, govsim.SimulateMsgDeposit(app.govKeeper)}, {100, stakingsim.SimulateMsgCreateValidator(app.accountKeeper, app.stakingKeeper)}, {5, stakingsim.SimulateMsgEditValidator(app.stakingKeeper)}, @@ -281,13 +281,13 @@ func testAndRunTxs(app *GaiaApp) []simulation.WeightedOperation { } } -func invariants(app *GaiaApp) []simulation.Invariant { - return []simulation.Invariant{ +func invariants(app *GaiaApp) []sdk.Invariant { + return []sdk.Invariant{ simulation.PeriodicInvariant(banksim.NonnegativeBalanceInvariant(app.accountKeeper), period, 0), simulation.PeriodicInvariant(govsim.AllInvariants(), period, 0), simulation.PeriodicInvariant(distrsim.AllInvariants(app.distrKeeper, app.stakingKeeper), period, 0), - simulation.PeriodicInvariant(stakingsim.AllInvariants(app.bankKeeper, app.stakingKeeper, - app.feeCollectionKeeper, app.distrKeeper, app.accountKeeper), period, 0), + simulation.PeriodicInvariant(stakingsim.AllInvariants(app.stakingKeeper, app.feeCollectionKeeper, + app.distrKeeper, app.accountKeeper), period, 0), simulation.PeriodicInvariant(slashingsim.AllInvariants(), period, 0), } } @@ -571,7 +571,7 @@ func TestAppStateDeterminism(t *testing.T) { simulation.SimulateFromSeed( t, app.BaseApp, appStateFn, seed, testAndRunTxs(app), - []simulation.Invariant{}, + []sdk.Invariant{}, 50, 100, true, diff --git a/cmd/gaia/cli_test/cli_test.go b/cmd/gaia/cli_test/cli_test.go index bff6f34e1b..0fec6eb6e1 100644 --- a/cmd/gaia/cli_test/cli_test.go +++ b/cmd/gaia/cli_test/cli_test.go @@ -22,7 +22,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/auth" "github.com/cosmos/cosmos-sdk/x/gov" - "github.com/cosmos/cosmos-sdk/x/staking" ) func TestGaiaCLIKeysAddMultisig(t *testing.T) { @@ -169,7 +168,7 @@ func TestGaiaCLIFeesDeduction(t *testing.T) { require.Equal(t, fooAmt.Int64(), fooAcc.GetCoins().AmountOf(fooDenom).Int64()) // insufficient funds (coins + fees) tx fails - largeCoins := staking.TokensFromTendermintPower(10000000) + largeCoins := sdk.TokensFromTendermintPower(10000000) success, _, _ = f.TxSend( keyFoo, barAddr, sdk.NewCoin(fooDenom, largeCoins), fmt.Sprintf("--fees=%s", sdk.NewInt64Coin(feeDenom, 2))) @@ -204,11 +203,11 @@ func TestGaiaCLISend(t *testing.T) { barAddr := f.KeyAddress(keyBar) fooAcc := f.QueryAccount(fooAddr) - startTokens := staking.TokensFromTendermintPower(50) + startTokens := sdk.TokensFromTendermintPower(50) require.Equal(t, startTokens, fooAcc.GetCoins().AmountOf(denom)) // Send some tokens from one account to the other - sendTokens := staking.TokensFromTendermintPower(10) + sendTokens := sdk.TokensFromTendermintPower(10) f.TxSend(keyFoo, barAddr, sdk.NewCoin(denom, sendTokens)) tests.WaitForNextNBlocksTM(1, f.Port) @@ -261,11 +260,11 @@ func TestGaiaCLIGasAuto(t *testing.T) { barAddr := f.KeyAddress(keyBar) fooAcc := f.QueryAccount(fooAddr) - startTokens := staking.TokensFromTendermintPower(50) + startTokens := sdk.TokensFromTendermintPower(50) require.Equal(t, startTokens, fooAcc.GetCoins().AmountOf(denom)) // Test failure with auto gas disabled and very little gas set by hand - sendTokens := staking.TokensFromTendermintPower(10) + sendTokens := sdk.TokensFromTendermintPower(10) success, _, _ := f.TxSend(keyFoo, barAddr, sdk.NewCoin(denom, sendTokens), "--gas=10") require.False(t, success) @@ -320,7 +319,7 @@ func TestGaiaCLICreateValidator(t *testing.T) { consPubKey := sdk.MustBech32ifyConsPub(ed25519.GenPrivKey().PubKey()) - sendTokens := staking.TokensFromTendermintPower(10) + sendTokens := sdk.TokensFromTendermintPower(10) f.TxSend(keyFoo, barAddr, sdk.NewCoin(denom, sendTokens)) tests.WaitForNextNBlocksTM(1, f.Port) @@ -338,7 +337,7 @@ func TestGaiaCLICreateValidator(t *testing.T) { require.Equal(t, 0, len(msg.GetSignatures())) // Test --dry-run - newValTokens := staking.TokensFromTendermintPower(2) + newValTokens := sdk.TokensFromTendermintPower(2) success, _, _ = f.TxStakingCreateValidator(keyBar, consPubKey, sdk.NewCoin(denom, newValTokens), "--dry-run") require.True(t, success) @@ -361,7 +360,7 @@ func TestGaiaCLICreateValidator(t *testing.T) { require.NotZero(t, validatorDelegations[0].Shares) // unbond a single share - unbondTokens := staking.TokensFromTendermintPower(1) + unbondTokens := sdk.TokensFromTendermintPower(1) success = f.TxStakingUnbond(keyBar, unbondTokens.String(), barVal) require.True(t, success) tests.WaitForNextNBlocksTM(1, f.Port) @@ -395,14 +394,14 @@ func TestGaiaCLISubmitProposal(t *testing.T) { fooAddr := f.KeyAddress(keyFoo) fooAcc := f.QueryAccount(fooAddr) - startTokens := staking.TokensFromTendermintPower(50) - require.Equal(t, startTokens, fooAcc.GetCoins().AmountOf(staking.DefaultBondDenom)) + startTokens := sdk.TokensFromTendermintPower(50) + require.Equal(t, startTokens, fooAcc.GetCoins().AmountOf(sdk.DefaultBondDenom)) proposalsQuery := f.QueryGovProposals() require.Empty(t, proposalsQuery) // Test submit generate only for submit proposal - proposalTokens := staking.TokensFromTendermintPower(5) + proposalTokens := sdk.TokensFromTendermintPower(5) success, stdout, stderr := f.TxGovSubmitProposal( keyFoo, "Text", "Test", "test", sdk.NewCoin(denom, proposalTokens), "--generate-only") require.True(t, success) @@ -442,7 +441,7 @@ func TestGaiaCLISubmitProposal(t *testing.T) { require.Equal(t, proposalTokens, deposit.Amount.AmountOf(denom)) // Test deposit generate only - depositTokens := staking.TokensFromTendermintPower(10) + depositTokens := sdk.TokensFromTendermintPower(10) success, stdout, stderr = f.TxGovDeposit(1, keyFoo, sdk.NewCoin(denom, depositTokens), "--generate-only") require.True(t, success) require.Empty(t, stderr) @@ -635,7 +634,7 @@ func TestGaiaCLISendGenerateSignAndBroadcast(t *testing.T) { barAddr := f.KeyAddress(keyBar) // Test generate sendTx with default gas - sendTokens := staking.TokensFromTendermintPower(10) + sendTokens := sdk.TokensFromTendermintPower(10) success, stdout, stderr := f.TxSend(keyFoo, barAddr, sdk.NewCoin(denom, sendTokens), "--generate-only") require.True(t, success) require.Empty(t, stderr) @@ -690,7 +689,7 @@ func TestGaiaCLISendGenerateSignAndBroadcast(t *testing.T) { // Ensure foo has right amount of funds fooAcc := f.QueryAccount(fooAddr) - startTokens := staking.TokensFromTendermintPower(50) + startTokens := sdk.TokensFromTendermintPower(50) require.Equal(t, startTokens, fooAcc.GetCoins().AmountOf(denom)) // Test broadcast @@ -775,7 +774,7 @@ func TestGaiaCLIEncode(t *testing.T) { // Build a testing transaction and write it to disk barAddr := f.KeyAddress(keyBar) - sendTokens := staking.TokensFromTendermintPower(10) + sendTokens := sdk.TokensFromTendermintPower(10) success, stdout, stderr := f.TxSend(keyFoo, barAddr, sdk.NewCoin(denom, sendTokens), "--generate-only", "--memo", "deadbeef") require.True(t, success) require.Empty(t, stderr) diff --git a/cmd/gaia/cli_test/test_helpers.go b/cmd/gaia/cli_test/test_helpers.go index 899a1db0e5..22fe83ef40 100644 --- a/cmd/gaia/cli_test/test_helpers.go +++ b/cmd/gaia/cli_test/test_helpers.go @@ -41,14 +41,14 @@ const ( var ( startCoins = sdk.Coins{ - sdk.NewCoin(feeDenom, staking.TokensFromTendermintPower(1000000)), - sdk.NewCoin(fee2Denom, staking.TokensFromTendermintPower(1000000)), - sdk.NewCoin(fooDenom, staking.TokensFromTendermintPower(1000)), - sdk.NewCoin(denom, staking.TokensFromTendermintPower(150)), + sdk.NewCoin(feeDenom, sdk.TokensFromTendermintPower(1000000)), + sdk.NewCoin(fee2Denom, sdk.TokensFromTendermintPower(1000000)), + sdk.NewCoin(fooDenom, sdk.TokensFromTendermintPower(1000)), + sdk.NewCoin(denom, sdk.TokensFromTendermintPower(150)), } vestingCoins = sdk.Coins{ - sdk.NewCoin(feeDenom, staking.TokensFromTendermintPower(500000)), + sdk.NewCoin(feeDenom, sdk.TokensFromTendermintPower(500000)), } ) diff --git a/cmd/gaia/cmd/gaiadebug/hack.go b/cmd/gaia/cmd/gaiadebug/hack.go index eb4c8749bf..e7a89cea7b 100644 --- a/cmd/gaia/cmd/gaiadebug/hack.go +++ b/cmd/gaia/cmd/gaiadebug/hack.go @@ -260,7 +260,7 @@ func (app *GaiaApp) initChainer(ctx sdk.Context, req abci.RequestInitChain) abci panic(err) // TODO https://github.com/cosmos/cosmos-sdk/issues/468 // return sdk.ErrGenesisParse("").TraceCause(err, "") } - slashing.InitGenesis(ctx, app.slashingKeeper, genesisState.SlashingData, genesisState.StakingData) + slashing.InitGenesis(ctx, app.slashingKeeper, genesisState.SlashingData, genesisState.StakingData.Validators.ToSDKValidators()) return abci.ResponseInitChain{ Validators: validators, diff --git a/cmd/gaia/init/gentx.go b/cmd/gaia/init/gentx.go index ef3ee7106d..e7779a343d 100644 --- a/cmd/gaia/init/gentx.go +++ b/cmd/gaia/init/gentx.go @@ -28,13 +28,12 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/auth" authtxb "github.com/cosmos/cosmos-sdk/x/auth/client/txbuilder" - "github.com/cosmos/cosmos-sdk/x/staking" "github.com/cosmos/cosmos-sdk/x/staking/client/cli" ) var ( - defaultTokens = staking.TokensFromTendermintPower(100) - defaultAmount = defaultTokens.String() + staking.DefaultBondDenom + defaultTokens = sdk.TokensFromTendermintPower(100) + defaultAmount = defaultTokens.String() + sdk.DefaultBondDenom defaultCommissionRate = "0.1" defaultCommissionMaxRate = "0.2" defaultCommissionMaxChangeRate = "0.01" diff --git a/cmd/gaia/init/testnet.go b/cmd/gaia/init/testnet.go index 346e6a4b34..fc59827a6c 100644 --- a/cmd/gaia/init/testnet.go +++ b/cmd/gaia/init/testnet.go @@ -19,7 +19,6 @@ import ( "github.com/cosmos/cosmos-sdk/x/auth" authtx "github.com/cosmos/cosmos-sdk/x/auth/client/txbuilder" "github.com/cosmos/cosmos-sdk/x/staking" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -85,7 +84,7 @@ Example: client.FlagChainID, "", "genesis file chain-id, if left blank will be randomly created", ) cmd.Flags().String( - server.FlagMinGasPrices, fmt.Sprintf("0.000006%s", stakingtypes.DefaultBondDenom), + server.FlagMinGasPrices, fmt.Sprintf("0.000006%s", sdk.DefaultBondDenom), "Minimum gas prices to accept for transactions; All fees in a tx must meet this minimum (e.g. 0.01photino,0.001stake)", ) @@ -192,21 +191,21 @@ func initTestnet(config *tmconfig.Config, cdc *codec.Codec) error { return err } - accTokens := staking.TokensFromTendermintPower(1000) - accStakingTokens := staking.TokensFromTendermintPower(500) + accTokens := sdk.TokensFromTendermintPower(1000) + accStakingTokens := sdk.TokensFromTendermintPower(500) accs = append(accs, app.GenesisAccount{ Address: addr, Coins: sdk.Coins{ sdk.NewCoin(fmt.Sprintf("%stoken", nodeDirName), accTokens), - sdk.NewCoin(stakingtypes.DefaultBondDenom, accStakingTokens), + sdk.NewCoin(sdk.DefaultBondDenom, accStakingTokens), }, }) - valTokens := staking.TokensFromTendermintPower(100) + valTokens := sdk.TokensFromTendermintPower(100) msg := staking.NewMsgCreateValidator( sdk.ValAddress(addr), valPubKeys[i], - sdk.NewCoin(stakingtypes.DefaultBondDenom, valTokens), + sdk.NewCoin(sdk.DefaultBondDenom, valTokens), staking.NewDescription(nodeDirName, "", "", ""), staking.NewCommissionMsg(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()), sdk.OneInt(), diff --git a/types/invariant.go b/types/invariant.go new file mode 100644 index 0000000000..86c9024faa --- /dev/null +++ b/types/invariant.go @@ -0,0 +1,10 @@ +package types + +// An Invariant is a function which tests a particular invariant. +// If the invariant has been broken, it should return an error +// containing a descriptive message about what happened. +// The simulator will then halt and print the logs. +type Invariant func(ctx Context) error + +// group of Invarient +type Invariants []Invariant diff --git a/types/stake.go b/types/stake.go index 6cf13385b4..8169307c9e 100644 --- a/types/stake.go +++ b/types/stake.go @@ -1,6 +1,8 @@ package types import ( + "math/big" + abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto" ) @@ -8,11 +10,21 @@ import ( // status of a validator type BondStatus byte -// nolint +// staking constants const ( Unbonded BondStatus = 0x00 Unbonding BondStatus = 0x01 Bonded BondStatus = 0x02 + + // default bond denomination + DefaultBondDenom = "stake" + + // Delay, in blocks, between when validator updates are returned to Tendermint and when they are applied. + // For example, if this is 0, the validator set at the end of a block will sign the next block, or + // if this is 1, the validator set at the end of a block will sign the block after the next. + // Constant as this should not change without a hard fork. + // TODO: Link to some Tendermint docs, this is very unobvious. + ValidatorUpdateDelay int64 = 1 ) //BondStatusToString for pretty prints of Bond Status @@ -29,6 +41,19 @@ func BondStatusToString(b BondStatus) string { } } +// PowerReduction is the amount of staking tokens required for 1 unit of Tendermint power +var PowerReduction = NewIntFromBigInt(new(big.Int).Exp(big.NewInt(10), big.NewInt(6), nil)) + +// TokensToTendermintPower - convert input tokens to potential tendermint power +func TokensToTendermintPower(tokens Int) int64 { + return (tokens.Div(PowerReduction)).Int64() +} + +// TokensFromTendermintPower - convert input power to tokens +func TokensFromTendermintPower(power int64) Int { + return NewInt(power).Mul(PowerReduction) +} + // nolint func (b BondStatus) Equal(b2 BondStatus) bool { return byte(b) == byte(b2) diff --git a/x/auth/client/txbuilder/txbuilder_test.go b/x/auth/client/txbuilder/txbuilder_test.go index cddd131414..3ae2f71242 100644 --- a/x/auth/client/txbuilder/txbuilder_test.go +++ b/x/auth/client/txbuilder/txbuilder_test.go @@ -11,7 +11,6 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/auth" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" ) var ( @@ -49,7 +48,7 @@ func TestTxBuilderBuild(t *testing.T) { SimulateGas: false, ChainID: "test-chain", Memo: "hello from Voyager 1!", - Fees: sdk.Coins{sdk.NewCoin(stakingtypes.DefaultBondDenom, sdk.NewInt(1))}, + Fees: sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(1))}, }, defaultMsg, StdSignMsg{ @@ -58,7 +57,7 @@ func TestTxBuilderBuild(t *testing.T) { Sequence: 1, Memo: "hello from Voyager 1!", Msgs: defaultMsg, - Fee: auth.NewStdFee(200000, sdk.Coins{sdk.NewCoin(stakingtypes.DefaultBondDenom, sdk.NewInt(1))}), + Fee: auth.NewStdFee(200000, sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(1))}), }, false, }, @@ -72,7 +71,7 @@ func TestTxBuilderBuild(t *testing.T) { SimulateGas: false, ChainID: "test-chain", Memo: "hello from Voyager 2!", - GasPrices: sdk.DecCoins{sdk.NewDecCoinFromDec(stakingtypes.DefaultBondDenom, sdk.NewDecWithPrec(10000, sdk.Precision))}, + GasPrices: sdk.DecCoins{sdk.NewDecCoinFromDec(sdk.DefaultBondDenom, sdk.NewDecWithPrec(10000, sdk.Precision))}, }, defaultMsg, StdSignMsg{ @@ -81,7 +80,7 @@ func TestTxBuilderBuild(t *testing.T) { Sequence: 1, Memo: "hello from Voyager 2!", Msgs: defaultMsg, - Fee: auth.NewStdFee(200000, sdk.Coins{sdk.NewCoin(stakingtypes.DefaultBondDenom, sdk.NewInt(1))}), + Fee: auth.NewStdFee(200000, sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(1))}), }, false, }, diff --git a/x/auth/keeper.go b/x/auth/keeper.go index e01c5c9a82..84899fa1c3 100644 --- a/x/auth/keeper.go +++ b/x/auth/keeper.go @@ -91,6 +91,17 @@ func (ak AccountKeeper) GetAccount(ctx sdk.Context, addr sdk.AccAddress) Account return acc } +// GetAllAccounts returns all accounts in the accountKeeper. +func (ak AccountKeeper) GetAllAccounts(ctx sdk.Context) []Account { + accounts := []Account{} + appendAccount := func(acc Account) (stop bool) { + accounts = append(accounts, acc) + return false + } + ak.IterateAccounts(ctx, appendAccount) + return accounts +} + // SetAccount implements sdk.AccountKeeper. func (ak AccountKeeper) SetAccount(ctx sdk.Context, acc Account) { addr := acc.GetAddress() diff --git a/x/bank/simulation/invariants.go b/x/bank/simulation/invariants.go index 34778b2758..70ca9b9db4 100644 --- a/x/bank/simulation/invariants.go +++ b/x/bank/simulation/invariants.go @@ -6,14 +6,12 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/auth" - "github.com/cosmos/cosmos-sdk/x/mock" - "github.com/cosmos/cosmos-sdk/x/mock/simulation" ) // NonnegativeBalanceInvariant checks that all accounts in the application have non-negative balances -func NonnegativeBalanceInvariant(mapper auth.AccountKeeper) simulation.Invariant { +func NonnegativeBalanceInvariant(ak auth.AccountKeeper) sdk.Invariant { return func(ctx sdk.Context) error { - accts := mock.GetAllAccounts(mapper, ctx) + accts := ak.GetAllAccounts(ctx) for _, acc := range accts { coins := acc.GetCoins() if coins.IsAnyNegative() { @@ -28,7 +26,7 @@ func NonnegativeBalanceInvariant(mapper auth.AccountKeeper) simulation.Invariant // TotalCoinsInvariant checks that the sum of the coins across all accounts // is what is expected -func TotalCoinsInvariant(mapper auth.AccountKeeper, totalSupplyFn func() sdk.Coins) simulation.Invariant { +func TotalCoinsInvariant(ak auth.AccountKeeper, totalSupplyFn func() sdk.Coins) sdk.Invariant { return func(ctx sdk.Context) error { totalCoins := sdk.Coins{} @@ -38,7 +36,7 @@ func TotalCoinsInvariant(mapper auth.AccountKeeper, totalSupplyFn func() sdk.Coi return false } - mapper.IterateAccounts(ctx, chkAccount) + ak.IterateAccounts(ctx, chkAccount) if !totalSupplyFn().IsEqual(totalCoins) { return errors.New("total calculated coins doesn't equal expected coins") } diff --git a/x/distribution/keeper/alias_functions.go b/x/distribution/keeper/alias_functions.go new file mode 100644 index 0000000000..575eafe539 --- /dev/null +++ b/x/distribution/keeper/alias_functions.go @@ -0,0 +1,15 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// get outstanding rewards +func (k Keeper) GetOutstandingRewardsCoins(ctx sdk.Context) sdk.DecCoins { + return k.GetOutstandingRewards(ctx) +} + +// get the community coins +func (k Keeper) GetFeePoolCommunityCoins(ctx sdk.Context) sdk.DecCoins { + return k.GetFeePool(ctx).CommunityPool +} diff --git a/x/distribution/keeper/allocation_test.go b/x/distribution/keeper/allocation_test.go index 84736f8b2b..d2c354a105 100644 --- a/x/distribution/keeper/allocation_test.go +++ b/x/distribution/keeper/allocation_test.go @@ -20,19 +20,19 @@ func TestAllocateTokensToValidatorWithCommission(t *testing.T) { // create validator with 50% commission commission := staking.NewCommissionMsg(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) msg := staking.NewMsgCreateValidator(valOpAddr1, valConsPk1, - sdk.NewCoin(staking.DefaultBondDenom, sdk.NewInt(100)), staking.Description{}, commission, sdk.OneInt()) + sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100)), staking.Description{}, commission, sdk.OneInt()) require.True(t, sh(ctx, msg).IsOK()) val := sk.Validator(ctx, valOpAddr1) // allocate tokens tokens := sdk.DecCoins{ - {staking.DefaultBondDenom, sdk.NewDec(10)}, + {sdk.DefaultBondDenom, sdk.NewDec(10)}, } k.AllocateTokensToValidator(ctx, val, tokens) // check commission expected := sdk.DecCoins{ - {staking.DefaultBondDenom, sdk.NewDec(5)}, + {sdk.DefaultBondDenom, sdk.NewDec(5)}, } require.Equal(t, expected, k.GetValidatorAccumulatedCommission(ctx, val.GetOperator())) @@ -50,13 +50,13 @@ func TestAllocateTokensToManyValidators(t *testing.T) { // create validator with 50% commission commission := staking.NewCommissionMsg(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) msg := staking.NewMsgCreateValidator(valOpAddr1, valConsPk1, - sdk.NewCoin(staking.DefaultBondDenom, sdk.NewInt(100)), staking.Description{}, commission, sdk.OneInt()) + sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100)), staking.Description{}, commission, sdk.OneInt()) require.True(t, sh(ctx, msg).IsOK()) // create second validator with 0% commission commission = staking.NewCommissionMsg(sdk.NewDec(0), sdk.NewDec(0), sdk.NewDec(0)) msg = staking.NewMsgCreateValidator(valOpAddr2, valConsPk2, - sdk.NewCoin(staking.DefaultBondDenom, sdk.NewInt(100)), staking.Description{}, commission, sdk.OneInt()) + sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100)), staking.Description{}, commission, sdk.OneInt()) require.True(t, sh(ctx, msg).IsOK()) abciValA := abci.Validator{ @@ -78,7 +78,7 @@ func TestAllocateTokensToManyValidators(t *testing.T) { // allocate tokens as if both had voted and second was proposer fees := sdk.Coins{ - {staking.DefaultBondDenom, sdk.NewInt(100)}, + {sdk.DefaultBondDenom, sdk.NewInt(100)}, } fck.SetCollectedFees(fees) votes := []abci.VoteInfo{ @@ -94,15 +94,15 @@ func TestAllocateTokensToManyValidators(t *testing.T) { k.AllocateTokens(ctx, 200, 200, valConsAddr2, votes) // 98 outstanding rewards (100 less 2 to community pool) - require.Equal(t, sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDec(98)}}, k.GetOutstandingRewards(ctx)) + require.Equal(t, sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDec(98)}}, k.GetOutstandingRewards(ctx)) // 2 community pool coins - require.Equal(t, sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDec(2)}}, k.GetFeePool(ctx).CommunityPool) + require.Equal(t, sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDec(2)}}, k.GetFeePool(ctx).CommunityPool) // 50% commission for first proposer, (0.5 * 93%) * 100 / 2 = 23.25 - require.Equal(t, sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDecWithPrec(2325, 2)}}, k.GetValidatorAccumulatedCommission(ctx, valOpAddr1)) + require.Equal(t, sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDecWithPrec(2325, 2)}}, k.GetValidatorAccumulatedCommission(ctx, valOpAddr1)) // zero commission for second proposer require.True(t, k.GetValidatorAccumulatedCommission(ctx, valOpAddr2).IsZero()) // just staking.proportional for first proposer less commission = (0.5 * 93%) * 100 / 2 = 23.25 - require.Equal(t, sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDecWithPrec(2325, 2)}}, k.GetValidatorCurrentRewards(ctx, valOpAddr1).Rewards) + require.Equal(t, sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDecWithPrec(2325, 2)}}, k.GetValidatorCurrentRewards(ctx, valOpAddr1).Rewards) // proposer reward + staking.proportional for second proposer = (5 % + 0.5 * (93%)) * 100 = 51.5 - require.Equal(t, sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDecWithPrec(515, 1)}}, k.GetValidatorCurrentRewards(ctx, valOpAddr2).Rewards) + require.Equal(t, sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDecWithPrec(515, 1)}}, k.GetValidatorCurrentRewards(ctx, valOpAddr2).Rewards) } diff --git a/x/distribution/keeper/delegation_test.go b/x/distribution/keeper/delegation_test.go index b6082b34ce..a34960b1c5 100644 --- a/x/distribution/keeper/delegation_test.go +++ b/x/distribution/keeper/delegation_test.go @@ -19,7 +19,7 @@ func TestCalculateRewardsBasic(t *testing.T) { // create validator with 50% commission commission := staking.NewCommissionMsg(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) msg := staking.NewMsgCreateValidator(valOpAddr1, valConsPk1, - sdk.NewCoin(staking.DefaultBondDenom, sdk.NewInt(100)), staking.Description{}, commission, sdk.OneInt()) + sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100)), staking.Description{}, commission, sdk.OneInt()) require.True(t, sh(ctx, msg).IsOK()) // end block to bond validator @@ -46,7 +46,7 @@ func TestCalculateRewardsBasic(t *testing.T) { // allocate some rewards initial := int64(10) - tokens := sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDec(initial)}} + tokens := sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDec(initial)}} k.AllocateTokensToValidator(ctx, val, tokens) // end period @@ -56,10 +56,10 @@ func TestCalculateRewardsBasic(t *testing.T) { rewards = k.calculateDelegationRewards(ctx, val, del, endingPeriod) // rewards should be half the tokens - require.Equal(t, sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDec(initial / 2)}}, rewards) + require.Equal(t, sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDec(initial / 2)}}, rewards) // commission should be the other half - require.Equal(t, sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDec(initial / 2)}}, k.GetValidatorAccumulatedCommission(ctx, valOpAddr1)) + require.Equal(t, sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDec(initial / 2)}}, k.GetValidatorAccumulatedCommission(ctx, valOpAddr1)) } func TestCalculateRewardsAfterSlash(t *testing.T) { @@ -72,9 +72,9 @@ func TestCalculateRewardsAfterSlash(t *testing.T) { // create validator with 50% commission commission := staking.NewCommissionMsg(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) valPower := int64(100) - valTokens := staking.TokensFromTendermintPower(valPower) + valTokens := sdk.TokensFromTendermintPower(valPower) msg := staking.NewMsgCreateValidator(valOpAddr1, valConsPk1, - sdk.NewCoin(staking.DefaultBondDenom, valTokens), staking.Description{}, commission, sdk.OneInt()) + sdk.NewCoin(sdk.DefaultBondDenom, valTokens), staking.Description{}, commission, sdk.OneInt()) got := sh(ctx, msg) require.True(t, got.IsOK(), "%v", got) @@ -107,8 +107,8 @@ func TestCalculateRewardsAfterSlash(t *testing.T) { ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 3) // allocate some rewards - initial := staking.TokensFromTendermintPower(10) - tokens := sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDecFromInt(initial)}} + initial := sdk.TokensFromTendermintPower(10) + tokens := sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDecFromInt(initial)}} k.AllocateTokensToValidator(ctx, val, tokens) // end period @@ -118,10 +118,10 @@ func TestCalculateRewardsAfterSlash(t *testing.T) { rewards = k.calculateDelegationRewards(ctx, val, del, endingPeriod) // rewards should be half the tokens - require.Equal(t, sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDecFromInt(initial.DivRaw(2))}}, rewards) + require.Equal(t, sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDecFromInt(initial.DivRaw(2))}}, rewards) // commission should be the other half - require.Equal(t, sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDecFromInt(initial.DivRaw(2))}}, + require.Equal(t, sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDecFromInt(initial.DivRaw(2))}}, k.GetValidatorAccumulatedCommission(ctx, valOpAddr1)) } @@ -134,10 +134,10 @@ func TestCalculateRewardsAfterManySlashes(t *testing.T) { // create validator with 50% commission power := int64(100) - valTokens := staking.TokensFromTendermintPower(power) + valTokens := sdk.TokensFromTendermintPower(power) commission := staking.NewCommissionMsg(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) msg := staking.NewMsgCreateValidator(valOpAddr1, valConsPk1, - sdk.NewCoin(staking.DefaultBondDenom, valTokens), staking.Description{}, commission, sdk.OneInt()) + sdk.NewCoin(sdk.DefaultBondDenom, valTokens), staking.Description{}, commission, sdk.OneInt()) require.True(t, sh(ctx, msg).IsOK()) // end block to bond validator @@ -169,8 +169,8 @@ func TestCalculateRewardsAfterManySlashes(t *testing.T) { ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 3) // allocate some rewards - initial := staking.TokensFromTendermintPower(10) - tokens := sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDecFromInt(initial)}} + initial := sdk.TokensFromTendermintPower(10) + tokens := sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDecFromInt(initial)}} k.AllocateTokensToValidator(ctx, val, tokens) // slash the validator by 50% again @@ -192,10 +192,10 @@ func TestCalculateRewardsAfterManySlashes(t *testing.T) { rewards = k.calculateDelegationRewards(ctx, val, del, endingPeriod) // rewards should be half the tokens - require.Equal(t, sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDecFromInt(initial)}}, rewards) + require.Equal(t, sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDecFromInt(initial)}}, rewards) // commission should be the other half - require.Equal(t, sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDecFromInt(initial)}}, + require.Equal(t, sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDecFromInt(initial)}}, k.GetValidatorAccumulatedCommission(ctx, valOpAddr1)) } @@ -209,7 +209,7 @@ func TestCalculateRewardsMultiDelegator(t *testing.T) { // create validator with 50% commission commission := staking.NewCommissionMsg(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) msg := staking.NewMsgCreateValidator(valOpAddr1, valConsPk1, - sdk.NewCoin(staking.DefaultBondDenom, sdk.NewInt(100)), staking.Description{}, commission, sdk.OneInt()) + sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100)), staking.Description{}, commission, sdk.OneInt()) require.True(t, sh(ctx, msg).IsOK()) // end block to bond validator @@ -221,11 +221,11 @@ func TestCalculateRewardsMultiDelegator(t *testing.T) { // allocate some rewards initial := int64(20) - tokens := sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDec(initial)}} + tokens := sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDec(initial)}} k.AllocateTokensToValidator(ctx, val, tokens) // second delegation - msg2 := staking.NewMsgDelegate(sdk.AccAddress(valOpAddr2), valOpAddr1, sdk.NewCoin(staking.DefaultBondDenom, sdk.NewInt(100))) + msg2 := staking.NewMsgDelegate(sdk.AccAddress(valOpAddr2), valOpAddr1, sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100))) require.True(t, sh(ctx, msg2).IsOK()) del2 := sk.Delegation(ctx, sdk.AccAddress(valOpAddr2), valOpAddr1) @@ -245,21 +245,21 @@ func TestCalculateRewardsMultiDelegator(t *testing.T) { rewards := k.calculateDelegationRewards(ctx, val, del1, endingPeriod) // rewards for del1 should be 3/4 initial - require.Equal(t, sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDec(initial * 3 / 4)}}, rewards) + require.Equal(t, sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDec(initial * 3 / 4)}}, rewards) // calculate delegation rewards for del2 rewards = k.calculateDelegationRewards(ctx, val, del2, endingPeriod) // rewards for del2 should be 1/4 initial - require.Equal(t, sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDec(initial * 1 / 4)}}, rewards) + require.Equal(t, sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDec(initial * 1 / 4)}}, rewards) // commission should be equal to initial (50% twice) - require.Equal(t, sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDec(initial)}}, k.GetValidatorAccumulatedCommission(ctx, valOpAddr1)) + require.Equal(t, sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDec(initial)}}, k.GetValidatorAccumulatedCommission(ctx, valOpAddr1)) } func TestWithdrawDelegationRewardsBasic(t *testing.T) { balancePower := int64(1000) - balanceTokens := staking.TokensFromTendermintPower(balancePower) + balanceTokens := sdk.TokensFromTendermintPower(balancePower) ctx, ak, k, sk, _ := CreateTestInputDefault(t, false, balancePower) sh := staking.NewHandler(sk) @@ -268,16 +268,16 @@ func TestWithdrawDelegationRewardsBasic(t *testing.T) { // create validator with 50% commission power := int64(100) - valTokens := staking.TokensFromTendermintPower(power) + valTokens := sdk.TokensFromTendermintPower(power) commission := staking.NewCommissionMsg(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) msg := staking.NewMsgCreateValidator(valOpAddr1, valConsPk1, - sdk.NewCoin(staking.DefaultBondDenom, valTokens), staking.Description{}, commission, sdk.OneInt()) + sdk.NewCoin(sdk.DefaultBondDenom, valTokens), staking.Description{}, commission, sdk.OneInt()) require.True(t, sh(ctx, msg).IsOK()) // assert correct initial balance expTokens := balanceTokens.Sub(valTokens) require.Equal(t, - sdk.Coins{{staking.DefaultBondDenom, expTokens}}, + sdk.Coins{{sdk.DefaultBondDenom, expTokens}}, ak.GetAccount(ctx, sdk.AccAddress(valOpAddr1)).GetCoins()) // end block to bond validator @@ -290,8 +290,8 @@ func TestWithdrawDelegationRewardsBasic(t *testing.T) { val := sk.Validator(ctx, valOpAddr1) // allocate some rewards - initial := staking.TokensFromTendermintPower(10) - tokens := sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDecFromInt(initial)}} + initial := sdk.TokensFromTendermintPower(10) + tokens := sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDecFromInt(initial)}} k.AllocateTokensToValidator(ctx, val, tokens) // historical count should be 2 (initial + latest for delegation) @@ -305,14 +305,14 @@ func TestWithdrawDelegationRewardsBasic(t *testing.T) { // assert correct balance exp := balanceTokens.Sub(valTokens).Add(initial.DivRaw(2)) - require.Equal(t, sdk.Coins{{staking.DefaultBondDenom, exp}}, ak.GetAccount(ctx, sdk.AccAddress(valOpAddr1)).GetCoins()) + require.Equal(t, sdk.Coins{{sdk.DefaultBondDenom, exp}}, ak.GetAccount(ctx, sdk.AccAddress(valOpAddr1)).GetCoins()) // withdraw commission require.Nil(t, k.WithdrawValidatorCommission(ctx, valOpAddr1)) // assert correct balance exp = balanceTokens.Sub(valTokens).Add(initial) - require.Equal(t, sdk.Coins{{staking.DefaultBondDenom, exp}}, ak.GetAccount(ctx, sdk.AccAddress(valOpAddr1)).GetCoins()) + require.Equal(t, sdk.Coins{{sdk.DefaultBondDenom, exp}}, ak.GetAccount(ctx, sdk.AccAddress(valOpAddr1)).GetCoins()) } func TestCalculateRewardsAfterManySlashesInSameBlock(t *testing.T) { @@ -324,10 +324,10 @@ func TestCalculateRewardsAfterManySlashesInSameBlock(t *testing.T) { // create validator with 50% commission power := int64(100) - valTokens := staking.TokensFromTendermintPower(power) + valTokens := sdk.TokensFromTendermintPower(power) commission := staking.NewCommissionMsg(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) msg := staking.NewMsgCreateValidator(valOpAddr1, valConsPk1, - sdk.NewCoin(staking.DefaultBondDenom, valTokens), staking.Description{}, commission, sdk.OneInt()) + sdk.NewCoin(sdk.DefaultBondDenom, valTokens), staking.Description{}, commission, sdk.OneInt()) require.True(t, sh(ctx, msg).IsOK()) // end block to bond validator @@ -350,8 +350,8 @@ func TestCalculateRewardsAfterManySlashesInSameBlock(t *testing.T) { ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 3) // allocate some rewards - initial := sdk.NewDecFromInt(staking.TokensFromTendermintPower(10)) - tokens := sdk.DecCoins{{staking.DefaultBondDenom, initial}} + initial := sdk.NewDecFromInt(sdk.TokensFromTendermintPower(10)) + tokens := sdk.DecCoins{{sdk.DefaultBondDenom, initial}} k.AllocateTokensToValidator(ctx, val, tokens) // slash the validator by 50% @@ -376,10 +376,10 @@ func TestCalculateRewardsAfterManySlashesInSameBlock(t *testing.T) { rewards = k.calculateDelegationRewards(ctx, val, del, endingPeriod) // rewards should be half the tokens - require.Equal(t, sdk.DecCoins{{staking.DefaultBondDenom, initial}}, rewards) + require.Equal(t, sdk.DecCoins{{sdk.DefaultBondDenom, initial}}, rewards) // commission should be the other half - require.Equal(t, sdk.DecCoins{{staking.DefaultBondDenom, initial}}, k.GetValidatorAccumulatedCommission(ctx, valOpAddr1)) + require.Equal(t, sdk.DecCoins{{sdk.DefaultBondDenom, initial}}, k.GetValidatorAccumulatedCommission(ctx, valOpAddr1)) } func TestCalculateRewardsMultiDelegatorMultiSlash(t *testing.T) { @@ -392,9 +392,9 @@ func TestCalculateRewardsMultiDelegatorMultiSlash(t *testing.T) { // create validator with 50% commission commission := staking.NewCommissionMsg(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) power := int64(100) - valTokens := staking.TokensFromTendermintPower(power) + valTokens := sdk.TokensFromTendermintPower(power) msg := staking.NewMsgCreateValidator(valOpAddr1, valConsPk1, - sdk.NewCoin(staking.DefaultBondDenom, valTokens), staking.Description{}, commission, sdk.OneInt()) + sdk.NewCoin(sdk.DefaultBondDenom, valTokens), staking.Description{}, commission, sdk.OneInt()) require.True(t, sh(ctx, msg).IsOK()) // end block to bond validator @@ -405,8 +405,8 @@ func TestCalculateRewardsMultiDelegatorMultiSlash(t *testing.T) { del1 := sk.Delegation(ctx, sdk.AccAddress(valOpAddr1), valOpAddr1) // allocate some rewards - initial := sdk.NewDecFromInt(staking.TokensFromTendermintPower(30)) - tokens := sdk.DecCoins{{staking.DefaultBondDenom, initial}} + initial := sdk.NewDecFromInt(sdk.TokensFromTendermintPower(30)) + tokens := sdk.DecCoins{{sdk.DefaultBondDenom, initial}} k.AllocateTokensToValidator(ctx, val, tokens) // slash the validator @@ -415,9 +415,9 @@ func TestCalculateRewardsMultiDelegatorMultiSlash(t *testing.T) { ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 3) // second delegation - delTokens := staking.TokensFromTendermintPower(100) + delTokens := sdk.TokensFromTendermintPower(100) msg2 := staking.NewMsgDelegate(sdk.AccAddress(valOpAddr2), valOpAddr1, - sdk.NewCoin(staking.DefaultBondDenom, delTokens)) + sdk.NewCoin(sdk.DefaultBondDenom, delTokens)) require.True(t, sh(ctx, msg2).IsOK()) del2 := sk.Delegation(ctx, sdk.AccAddress(valOpAddr2), valOpAddr1) @@ -442,16 +442,16 @@ func TestCalculateRewardsMultiDelegatorMultiSlash(t *testing.T) { rewards := k.calculateDelegationRewards(ctx, val, del1, endingPeriod) // rewards for del1 should be 2/3 initial (half initial first period, 1/6 initial second period) - require.Equal(t, sdk.DecCoins{{staking.DefaultBondDenom, initial.QuoInt64(2).Add(initial.QuoInt64(6))}}, rewards) + require.Equal(t, sdk.DecCoins{{sdk.DefaultBondDenom, initial.QuoInt64(2).Add(initial.QuoInt64(6))}}, rewards) // calculate delegation rewards for del2 rewards = k.calculateDelegationRewards(ctx, val, del2, endingPeriod) // rewards for del2 should be initial / 3 - require.Equal(t, sdk.DecCoins{{staking.DefaultBondDenom, initial.QuoInt64(3)}}, rewards) + require.Equal(t, sdk.DecCoins{{sdk.DefaultBondDenom, initial.QuoInt64(3)}}, rewards) // commission should be equal to initial (twice 50% commission, unaffected by slashing) - require.Equal(t, sdk.DecCoins{{staking.DefaultBondDenom, initial}}, k.GetValidatorAccumulatedCommission(ctx, valOpAddr1)) + require.Equal(t, sdk.DecCoins{{sdk.DefaultBondDenom, initial}}, k.GetValidatorAccumulatedCommission(ctx, valOpAddr1)) } func TestCalculateRewardsMultiDelegatorMultWithdraw(t *testing.T) { @@ -464,7 +464,7 @@ func TestCalculateRewardsMultiDelegatorMultWithdraw(t *testing.T) { // create validator with 50% commission commission := staking.NewCommissionMsg(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) msg := staking.NewMsgCreateValidator(valOpAddr1, valConsPk1, - sdk.NewCoin(staking.DefaultBondDenom, sdk.NewInt(100)), staking.Description{}, commission, sdk.OneInt()) + sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100)), staking.Description{}, commission, sdk.OneInt()) require.True(t, sh(ctx, msg).IsOK()) // end block to bond validator @@ -476,14 +476,14 @@ func TestCalculateRewardsMultiDelegatorMultWithdraw(t *testing.T) { // allocate some rewards initial := int64(20) - tokens := sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDec(initial)}} + tokens := sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDec(initial)}} k.AllocateTokensToValidator(ctx, val, tokens) // historical count should be 2 (validator init, delegation init) require.Equal(t, uint64(2), k.GetValidatorHistoricalReferenceCount(ctx)) // second delegation - msg2 := staking.NewMsgDelegate(sdk.AccAddress(valOpAddr2), valOpAddr1, sdk.NewCoin(staking.DefaultBondDenom, sdk.NewInt(100))) + msg2 := staking.NewMsgDelegate(sdk.AccAddress(valOpAddr2), valOpAddr1, sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100))) require.True(t, sh(ctx, msg2).IsOK()) // historical count should be 3 (second delegation init) @@ -548,10 +548,10 @@ func TestCalculateRewardsMultiDelegatorMultWithdraw(t *testing.T) { rewards = k.calculateDelegationRewards(ctx, val, del2, endingPeriod) // rewards for del2 should be 1/4 initial - require.Equal(t, sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDec(initial / 4)}}, rewards) + require.Equal(t, sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDec(initial / 4)}}, rewards) // commission should be half initial - require.Equal(t, sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDec(initial / 2)}}, k.GetValidatorAccumulatedCommission(ctx, valOpAddr1)) + require.Equal(t, sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDec(initial / 2)}}, k.GetValidatorAccumulatedCommission(ctx, valOpAddr1)) // allocate some more rewards k.AllocateTokensToValidator(ctx, val, tokens) @@ -566,13 +566,13 @@ func TestCalculateRewardsMultiDelegatorMultWithdraw(t *testing.T) { rewards = k.calculateDelegationRewards(ctx, val, del1, endingPeriod) // rewards for del1 should be 1/4 initial - require.Equal(t, sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDec(initial / 4)}}, rewards) + require.Equal(t, sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDec(initial / 4)}}, rewards) // calculate delegation rewards for del2 rewards = k.calculateDelegationRewards(ctx, val, del2, endingPeriod) // rewards for del2 should be 1/2 initial - require.Equal(t, sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDec(initial / 2)}}, rewards) + require.Equal(t, sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDec(initial / 2)}}, rewards) // commission should be zero require.True(t, k.GetValidatorAccumulatedCommission(ctx, valOpAddr1).IsZero()) diff --git a/x/distribution/keeper/keeper_test.go b/x/distribution/keeper/keeper_test.go index e30eb78f9a..56ca707034 100644 --- a/x/distribution/keeper/keeper_test.go +++ b/x/distribution/keeper/keeper_test.go @@ -7,7 +7,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/distribution/types" - "github.com/cosmos/cosmos-sdk/x/staking" ) func TestSetWithdrawAddr(t *testing.T) { @@ -32,9 +31,9 @@ func TestWithdrawValidatorCommission(t *testing.T) { // check initial balance balance := ak.GetAccount(ctx, sdk.AccAddress(valOpAddr3)).GetCoins() - expTokens := staking.TokensFromTendermintPower(1000) + expTokens := sdk.TokensFromTendermintPower(1000) require.Equal(t, sdk.Coins{ - {"stake", staking.TokensFromTendermintPower(1000)}, + {"stake", sdk.TokensFromTendermintPower(1000)}, }, balance) // set commission diff --git a/x/distribution/keeper/querier_test.go b/x/distribution/keeper/querier_test.go index 61c3af57ba..874b85034a 100644 --- a/x/distribution/keeper/querier_test.go +++ b/x/distribution/keeper/querier_test.go @@ -158,15 +158,15 @@ func TestQueries(t *testing.T) { keeper.SetOutstandingRewards(ctx, sdk.DecCoins{}) comm := staking.NewCommissionMsg(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) msg := staking.NewMsgCreateValidator(valOpAddr1, valConsPk1, - sdk.NewCoin(staking.DefaultBondDenom, sdk.NewInt(100)), staking.Description{}, comm, sdk.OneInt()) + sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100)), staking.Description{}, comm, sdk.OneInt()) require.True(t, sh(ctx, msg).IsOK()) staking.EndBlocker(ctx, sk) val := sk.Validator(ctx, valOpAddr1) rewards := getQueriedDelegationRewards(t, ctx, cdc, querier, sdk.AccAddress(valOpAddr1), valOpAddr1) require.True(t, rewards.IsZero()) initial := int64(10) - tokens := sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDec(initial)}} + tokens := sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDec(initial)}} keeper.AllocateTokensToValidator(ctx, val, tokens) rewards = getQueriedDelegationRewards(t, ctx, cdc, querier, sdk.AccAddress(valOpAddr1), valOpAddr1) - require.Equal(t, sdk.DecCoins{{staking.DefaultBondDenom, sdk.NewDec(initial / 2)}}, rewards) + require.Equal(t, sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDec(initial / 2)}}, rewards) } diff --git a/x/distribution/keeper/test_common.go b/x/distribution/keeper/test_common.go index 0a36910e83..a17b4b5fe9 100644 --- a/x/distribution/keeper/test_common.go +++ b/x/distribution/keeper/test_common.go @@ -83,7 +83,7 @@ func CreateTestInputAdvanced(t *testing.T, isCheckTx bool, initPower int64, communityTax sdk.Dec) ( sdk.Context, auth.AccountKeeper, Keeper, staking.Keeper, DummyFeeCollectionKeeper) { - initCoins := staking.TokensFromTendermintPower(initPower) + initCoins := sdk.TokensFromTendermintPower(initPower) keyDistr := sdk.NewKVStoreKey(types.StoreKey) keyStaking := sdk.NewKVStoreKey(staking.StoreKey) diff --git a/x/distribution/simulation/invariants.go b/x/distribution/simulation/invariants.go index 2f33d02b2f..ac4fcdffe5 100644 --- a/x/distribution/simulation/invariants.go +++ b/x/distribution/simulation/invariants.go @@ -6,12 +6,10 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" distr "github.com/cosmos/cosmos-sdk/x/distribution" "github.com/cosmos/cosmos-sdk/x/distribution/types" - "github.com/cosmos/cosmos-sdk/x/mock/simulation" - "github.com/cosmos/cosmos-sdk/x/staking" ) // AllInvariants runs all invariants of the distribution module -func AllInvariants(d distr.Keeper, stk staking.Keeper) simulation.Invariant { +func AllInvariants(d distr.Keeper, stk types.StakingKeeper) sdk.Invariant { return func(ctx sdk.Context) error { err := CanWithdrawInvariant(d, stk)(ctx) if err != nil { @@ -30,7 +28,7 @@ func AllInvariants(d distr.Keeper, stk staking.Keeper) simulation.Invariant { } // NonNegativeOutstandingInvariant checks that outstanding unwithdrawn fees are never negative -func NonNegativeOutstandingInvariant(k distr.Keeper) simulation.Invariant { +func NonNegativeOutstandingInvariant(k distr.Keeper) sdk.Invariant { return func(ctx sdk.Context) error { outstanding := k.GetOutstandingRewards(ctx) if outstanding.HasNegative() { @@ -41,7 +39,7 @@ func NonNegativeOutstandingInvariant(k distr.Keeper) simulation.Invariant { } // CanWithdrawInvariant checks that current rewards can be completely withdrawn -func CanWithdrawInvariant(k distr.Keeper, sk staking.Keeper) simulation.Invariant { +func CanWithdrawInvariant(k distr.Keeper, sk types.StakingKeeper) sdk.Invariant { return func(ctx sdk.Context) error { // cache, we don't want to write changes @@ -54,9 +52,9 @@ func CanWithdrawInvariant(k distr.Keeper, sk staking.Keeper) simulation.Invarian }) // iterate over all current delegations, withdraw rewards - dels := sk.GetAllDelegations(ctx) + dels := sk.GetAllSDKDelegations(ctx) for _, delegation := range dels { - _ = k.WithdrawDelegationRewards(ctx, delegation.DelegatorAddr, delegation.ValidatorAddr) + _ = k.WithdrawDelegationRewards(ctx, delegation.GetDelegatorAddr(), delegation.GetValidatorAddr()) } remaining := k.GetOutstandingRewards(ctx) @@ -70,7 +68,7 @@ func CanWithdrawInvariant(k distr.Keeper, sk staking.Keeper) simulation.Invarian } // ReferenceCountInvariant checks that the number of historical rewards records is correct -func ReferenceCountInvariant(k distr.Keeper, sk staking.Keeper) simulation.Invariant { +func ReferenceCountInvariant(k distr.Keeper, sk types.StakingKeeper) sdk.Invariant { return func(ctx sdk.Context) error { valCount := uint64(0) @@ -78,19 +76,23 @@ func ReferenceCountInvariant(k distr.Keeper, sk staking.Keeper) simulation.Invar valCount++ return false }) - dels := sk.GetAllDelegations(ctx) + dels := sk.GetAllSDKDelegations(ctx) slashCount := uint64(0) - k.IterateValidatorSlashEvents(ctx, func(_ sdk.ValAddress, _ uint64, _ types.ValidatorSlashEvent) (stop bool) { - slashCount++ - return false - }) + k.IterateValidatorSlashEvents(ctx, + func(_ sdk.ValAddress, _ uint64, _ types.ValidatorSlashEvent) (stop bool) { + slashCount++ + return false + }) - // one record per validator (last tracked period), one record per delegation (previous period), one record per slash (previous period) + // one record per validator (last tracked period), one record per + // delegation (previous period), one record per slash (previous period) expected := valCount + uint64(len(dels)) + slashCount count := k.GetValidatorHistoricalReferenceCount(ctx) if count != expected { - return fmt.Errorf("unexpected number of historical rewards records: expected %v (%v vals + %v dels + %v slashes), got %v", expected, valCount, len(dels), slashCount, count) + return fmt.Errorf("unexpected number of historical rewards records: "+ + "expected %v (%v vals + %v dels + %v slashes), got %v", + expected, valCount, len(dels), slashCount, count) } return nil diff --git a/x/distribution/types/keepers.go b/x/distribution/types/expected_keepers.go similarity index 84% rename from x/distribution/types/keepers.go rename to x/distribution/types/expected_keepers.go index 07fd2b7362..51b992b3bb 100644 --- a/x/distribution/types/keepers.go +++ b/x/distribution/types/expected_keepers.go @@ -12,6 +12,11 @@ type StakingKeeper interface { TotalPower(ctx sdk.Context) sdk.Int GetLastTotalPower(ctx sdk.Context) sdk.Int GetLastValidatorPower(ctx sdk.Context, valAddr sdk.ValAddress) int64 + + // used for invariants + IterateValidators(ctx sdk.Context, + fn func(index int64, validator sdk.Validator) (stop bool)) + GetAllSDKDelegations(ctx sdk.Context) []sdk.Delegation } // expected coin keeper diff --git a/x/gov/endblocker_test.go b/x/gov/endblocker_test.go index 9ce46419ed..d4847b764f 100644 --- a/x/gov/endblocker_test.go +++ b/x/gov/endblocker_test.go @@ -9,7 +9,6 @@ import ( abci "github.com/tendermint/tendermint/abci/types" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/staking" ) func TestTickExpiredDepositPeriod(t *testing.T) { @@ -23,7 +22,7 @@ func TestTickExpiredDepositPeriod(t *testing.T) { require.False(t, inactiveQueue.Valid()) inactiveQueue.Close() - newProposalMsg := NewMsgSubmitProposal("Test", "test", ProposalTypeText, addrs[0], sdk.Coins{sdk.NewInt64Coin(staking.DefaultBondDenom, 5)}) + newProposalMsg := NewMsgSubmitProposal("Test", "test", ProposalTypeText, addrs[0], sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 5)}) res := govHandler(ctx, newProposalMsg) require.True(t, res.IsOK()) @@ -66,7 +65,7 @@ func TestTickMultipleExpiredDepositPeriod(t *testing.T) { require.False(t, inactiveQueue.Valid()) inactiveQueue.Close() - newProposalMsg := NewMsgSubmitProposal("Test", "test", ProposalTypeText, addrs[0], sdk.Coins{sdk.NewInt64Coin(staking.DefaultBondDenom, 5)}) + newProposalMsg := NewMsgSubmitProposal("Test", "test", ProposalTypeText, addrs[0], sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 5)}) res := govHandler(ctx, newProposalMsg) require.True(t, res.IsOK()) @@ -83,7 +82,7 @@ func TestTickMultipleExpiredDepositPeriod(t *testing.T) { require.False(t, inactiveQueue.Valid()) inactiveQueue.Close() - newProposalMsg2 := NewMsgSubmitProposal("Test2", "test2", ProposalTypeText, addrs[1], sdk.Coins{sdk.NewInt64Coin(staking.DefaultBondDenom, 5)}) + newProposalMsg2 := NewMsgSubmitProposal("Test2", "test2", ProposalTypeText, addrs[1], sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 5)}) res = govHandler(ctx, newProposalMsg2) require.True(t, res.IsOK()) @@ -126,7 +125,7 @@ func TestTickPassedDepositPeriod(t *testing.T) { require.False(t, activeQueue.Valid()) activeQueue.Close() - newProposalMsg := NewMsgSubmitProposal("Test", "test", ProposalTypeText, addrs[0], sdk.Coins{sdk.NewInt64Coin(staking.DefaultBondDenom, 5)}) + newProposalMsg := NewMsgSubmitProposal("Test", "test", ProposalTypeText, addrs[0], sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 5)}) res := govHandler(ctx, newProposalMsg) require.True(t, res.IsOK()) @@ -145,7 +144,7 @@ func TestTickPassedDepositPeriod(t *testing.T) { require.False(t, inactiveQueue.Valid()) inactiveQueue.Close() - newDepositMsg := NewMsgDeposit(addrs[1], proposalID, sdk.Coins{sdk.NewInt64Coin(staking.DefaultBondDenom, 5)}) + newDepositMsg := NewMsgDeposit(addrs[1], proposalID, sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 5)}) res = govHandler(ctx, newDepositMsg) require.True(t, res.IsOK()) @@ -169,7 +168,7 @@ func TestTickPassedVotingPeriod(t *testing.T) { require.False(t, activeQueue.Valid()) activeQueue.Close() - proposalCoins := sdk.Coins{sdk.NewCoin(staking.DefaultBondDenom, staking.TokensFromTendermintPower(5))} + proposalCoins := sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, sdk.TokensFromTendermintPower(5))} newProposalMsg := NewMsgSubmitProposal("Test", "test", ProposalTypeText, addrs[0], proposalCoins) res := govHandler(ctx, newProposalMsg) diff --git a/x/gov/expected_keepers.go b/x/gov/expected_keepers.go new file mode 100644 index 0000000000..513c08ca07 --- /dev/null +++ b/x/gov/expected_keepers.go @@ -0,0 +1,12 @@ +package gov + +import sdk "github.com/cosmos/cosmos-sdk/types" + +// expected bank keeper +type BankKeeper interface { + GetCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins + + // TODO remove once governance doesn't require use of accounts + SendCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) (sdk.Tags, sdk.Error) + SetSendEnabled(ctx sdk.Context, enabled bool) +} diff --git a/x/gov/genesis.go b/x/gov/genesis.go index 8e4c31ac58..957381d590 100644 --- a/x/gov/genesis.go +++ b/x/gov/genesis.go @@ -6,7 +6,6 @@ import ( "time" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/staking" ) const ( @@ -48,11 +47,11 @@ func NewGenesisState(startingProposalID uint64, dp DepositParams, vp VotingParam // get raw genesis raw message for testing func DefaultGenesisState() GenesisState { - minDepositTokens := staking.TokensFromTendermintPower(10) + minDepositTokens := sdk.TokensFromTendermintPower(10) return GenesisState{ StartingProposalID: 1, DepositParams: DepositParams{ - MinDeposit: sdk.Coins{sdk.NewCoin(staking.DefaultBondDenom, minDepositTokens)}, + MinDeposit: sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, minDepositTokens)}, MaxDepositPeriod: DefaultPeriod, }, VotingParams: VotingParams{ diff --git a/x/gov/genesis_test.go b/x/gov/genesis_test.go index 61f2c299ac..5624c58ae6 100644 --- a/x/gov/genesis_test.go +++ b/x/gov/genesis_test.go @@ -5,8 +5,6 @@ import ( "github.com/stretchr/testify/require" - "github.com/cosmos/cosmos-sdk/x/mock" - abci "github.com/tendermint/tendermint/abci/types" ) @@ -78,7 +76,7 @@ func TestImportExportQueues(t *testing.T) { require.True(t, keeper.GetProposal(ctx, proposalID1).GetStatus() == StatusDepositPeriod) require.True(t, keeper.GetProposal(ctx, proposalID2).GetStatus() == StatusVotingPeriod) - genAccs := mock.GetAllAccounts(mapp.AccountKeeper, ctx) + genAccs := mapp.AccountKeeper.GetAllAccounts(ctx) // Export the state and import it into a new Mock App genState := ExportGenesis(ctx, keeper) diff --git a/x/gov/keeper.go b/x/gov/keeper.go index 3a3cdcb814..9616791dd4 100644 --- a/x/gov/keeper.go +++ b/x/gov/keeper.go @@ -5,7 +5,6 @@ import ( codec "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/bank" "github.com/cosmos/cosmos-sdk/x/params" "github.com/tendermint/tendermint/crypto" @@ -57,7 +56,7 @@ type Keeper struct { paramSpace params.Subspace // The reference to the CoinKeeper to modify balances - ck bank.Keeper + ck BankKeeper // The ValidatorSet to get information about validators vs sdk.ValidatorSet @@ -80,7 +79,9 @@ type Keeper struct { // - depositing funds into proposals, and activating upon sufficient funds being deposited // - users voting on proposals, with weight proportional to stake in the system // - and tallying the result of the vote. -func NewKeeper(cdc *codec.Codec, key sdk.StoreKey, paramsKeeper params.Keeper, paramSpace params.Subspace, ck bank.Keeper, ds sdk.DelegationSet, codespace sdk.CodespaceType) Keeper { +func NewKeeper(cdc *codec.Codec, key sdk.StoreKey, paramsKeeper params.Keeper, + paramSpace params.Subspace, ck BankKeeper, ds sdk.DelegationSet, codespace sdk.CodespaceType) Keeper { + return Keeper{ storeKey: key, paramsKeeper: paramsKeeper, diff --git a/x/gov/keeper_test.go b/x/gov/keeper_test.go index 8fc2460ca9..4524505535 100644 --- a/x/gov/keeper_test.go +++ b/x/gov/keeper_test.go @@ -9,7 +9,6 @@ import ( abci "github.com/tendermint/tendermint/abci/types" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/staking" ) func TestGetSetProposal(t *testing.T) { @@ -70,14 +69,14 @@ func TestDeposits(t *testing.T) { proposal := keeper.NewTextProposal(ctx, "Test", "description", ProposalTypeText) proposalID := proposal.GetProposalID() - fourSteak := sdk.Coins{sdk.NewCoin(staking.DefaultBondDenom, staking.TokensFromTendermintPower(4))} - fiveSteak := sdk.Coins{sdk.NewCoin(staking.DefaultBondDenom, staking.TokensFromTendermintPower(5))} + fourSteak := sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, sdk.TokensFromTendermintPower(4))} + fiveSteak := sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, sdk.TokensFromTendermintPower(5))} addr0Initial := keeper.ck.GetCoins(ctx, addrs[0]) addr1Initial := keeper.ck.GetCoins(ctx, addrs[1]) - expTokens := staking.TokensFromTendermintPower(42) - require.Equal(t, sdk.Coins{sdk.NewCoin(staking.DefaultBondDenom, expTokens)}, addr0Initial) + expTokens := sdk.TokensFromTendermintPower(42) + require.Equal(t, sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, expTokens)}, addr0Initial) require.True(t, proposal.GetTotalDeposit().IsEqual(sdk.Coins{})) // Check no deposits at beginning diff --git a/x/gov/msgs_test.go b/x/gov/msgs_test.go index 682aecdce0..41e9cc65f2 100644 --- a/x/gov/msgs_test.go +++ b/x/gov/msgs_test.go @@ -8,14 +8,13 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/mock" - "github.com/cosmos/cosmos-sdk/x/staking" ) var ( - coinsPos = sdk.Coins{sdk.NewInt64Coin(staking.DefaultBondDenom, 1000)} + coinsPos = sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 1000)} coinsZero = sdk.Coins{} coinsPosNotAtoms = sdk.Coins{sdk.NewInt64Coin("foo", 10000)} - coinsMulti = sdk.Coins{sdk.NewInt64Coin(staking.DefaultBondDenom, 1000), sdk.NewInt64Coin("foo", 10000)} + coinsMulti = sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 1000), sdk.NewInt64Coin("foo", 10000)} ) func init() { diff --git a/x/gov/simulation/invariants.go b/x/gov/simulation/invariants.go index 06f8e9774a..89f886ed71 100644 --- a/x/gov/simulation/invariants.go +++ b/x/gov/simulation/invariants.go @@ -2,11 +2,10 @@ package simulation import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/mock/simulation" ) // AllInvariants tests all governance invariants -func AllInvariants() simulation.Invariant { +func AllInvariants() sdk.Invariant { return func(ctx sdk.Context) error { // TODO Add some invariants! // Checking proposal queues, no passed-but-unexecuted proposals, etc. diff --git a/x/gov/simulation/msgs.go b/x/gov/simulation/msgs.go index 7c078bdcf3..d3707d525b 100644 --- a/x/gov/simulation/msgs.go +++ b/x/gov/simulation/msgs.go @@ -10,7 +10,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/gov" "github.com/cosmos/cosmos-sdk/x/mock/simulation" - "github.com/cosmos/cosmos-sdk/x/staking" ) // SimulateSubmittingVotingAndSlashingForProposal simulates creating a msg Submit Proposal @@ -18,7 +17,7 @@ import ( // future operations. // TODO: Vote more intelligently, so we can actually do some checks regarding votes passing or failing // TODO: Actually check that validator slashings happened -func SimulateSubmittingVotingAndSlashingForProposal(k gov.Keeper, sk staking.Keeper) simulation.Operation { +func SimulateSubmittingVotingAndSlashingForProposal(k gov.Keeper) simulation.Operation { handler := gov.NewHandler(k) // The states are: // column 1: All validators vote @@ -178,7 +177,7 @@ func operationSimulateMsgVote(k gov.Keeper, acc simulation.Account, proposalID u func randomDeposit(r *rand.Rand) sdk.Coins { // TODO Choose based on account balance and min deposit amount := int64(r.Intn(20)) + 1 - return sdk.Coins{sdk.NewInt64Coin(staking.DefaultBondDenom, amount)} + return sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, amount)} } // Pick a random proposal ID diff --git a/x/gov/tally_test.go b/x/gov/tally_test.go index 966635fc76..cf89293eeb 100644 --- a/x/gov/tally_test.go +++ b/x/gov/tally_test.go @@ -25,9 +25,9 @@ func createValidators(t *testing.T, stakingHandler sdk.Handler, ctx sdk.Context, for i := 0; i < len(addrs); i++ { - valTokens := staking.TokensFromTendermintPower(powerAmt[i]) + valTokens := sdk.TokensFromTendermintPower(powerAmt[i]) valCreateMsg := staking.NewMsgCreateValidator( - addrs[i], pubkeys[i], sdk.NewCoin(staking.DefaultBondDenom, valTokens), + addrs[i], pubkeys[i], sdk.NewCoin(sdk.DefaultBondDenom, valTokens), testDescription, testCommissionMsg, sdk.OneInt(), ) @@ -318,8 +318,8 @@ func TestTallyDelgatorOverride(t *testing.T) { createValidators(t, stakingHandler, ctx, valAddrs, []int64{5, 6, 7}) staking.EndBlocker(ctx, sk) - delTokens := staking.TokensFromTendermintPower(30) - delegator1Msg := staking.NewMsgDelegate(addrs[3], sdk.ValAddress(addrs[2]), sdk.NewCoin(staking.DefaultBondDenom, delTokens)) + delTokens := sdk.TokensFromTendermintPower(30) + delegator1Msg := staking.NewMsgDelegate(addrs[3], sdk.ValAddress(addrs[2]), sdk.NewCoin(sdk.DefaultBondDenom, delTokens)) stakingHandler(ctx, delegator1Msg) proposal := keeper.NewTextProposal(ctx, "Test", "description", ProposalTypeText) @@ -356,8 +356,8 @@ func TestTallyDelgatorInherit(t *testing.T) { createValidators(t, stakingHandler, ctx, valAddrs, []int64{5, 6, 7}) staking.EndBlocker(ctx, sk) - delTokens := staking.TokensFromTendermintPower(30) - delegator1Msg := staking.NewMsgDelegate(addrs[3], sdk.ValAddress(addrs[2]), sdk.NewCoin(staking.DefaultBondDenom, delTokens)) + delTokens := sdk.TokensFromTendermintPower(30) + delegator1Msg := staking.NewMsgDelegate(addrs[3], sdk.ValAddress(addrs[2]), sdk.NewCoin(sdk.DefaultBondDenom, delTokens)) stakingHandler(ctx, delegator1Msg) proposal := keeper.NewTextProposal(ctx, "Test", "description", ProposalTypeText) @@ -392,10 +392,10 @@ func TestTallyDelgatorMultipleOverride(t *testing.T) { createValidators(t, stakingHandler, ctx, valAddrs, []int64{5, 6, 7}) staking.EndBlocker(ctx, sk) - delTokens := staking.TokensFromTendermintPower(10) - delegator1Msg := staking.NewMsgDelegate(addrs[3], sdk.ValAddress(addrs[2]), sdk.NewCoin(staking.DefaultBondDenom, delTokens)) + delTokens := sdk.TokensFromTendermintPower(10) + delegator1Msg := staking.NewMsgDelegate(addrs[3], sdk.ValAddress(addrs[2]), sdk.NewCoin(sdk.DefaultBondDenom, delTokens)) stakingHandler(ctx, delegator1Msg) - delegator1Msg2 := staking.NewMsgDelegate(addrs[3], sdk.ValAddress(addrs[1]), sdk.NewCoin(staking.DefaultBondDenom, delTokens)) + delegator1Msg2 := staking.NewMsgDelegate(addrs[3], sdk.ValAddress(addrs[1]), sdk.NewCoin(sdk.DefaultBondDenom, delTokens)) stakingHandler(ctx, delegator1Msg2) proposal := keeper.NewTextProposal(ctx, "Test", "description", ProposalTypeText) @@ -424,29 +424,29 @@ func TestTallyDelgatorMultipleInherit(t *testing.T) { ctx := mapp.BaseApp.NewContext(false, abci.Header{}) stakingHandler := staking.NewHandler(sk) - valTokens1 := staking.TokensFromTendermintPower(25) + valTokens1 := sdk.TokensFromTendermintPower(25) val1CreateMsg := staking.NewMsgCreateValidator( - sdk.ValAddress(addrs[0]), ed25519.GenPrivKey().PubKey(), sdk.NewCoin(staking.DefaultBondDenom, valTokens1), testDescription, testCommissionMsg, sdk.OneInt(), + sdk.ValAddress(addrs[0]), ed25519.GenPrivKey().PubKey(), sdk.NewCoin(sdk.DefaultBondDenom, valTokens1), testDescription, testCommissionMsg, sdk.OneInt(), ) stakingHandler(ctx, val1CreateMsg) - valTokens2 := staking.TokensFromTendermintPower(6) + valTokens2 := sdk.TokensFromTendermintPower(6) val2CreateMsg := staking.NewMsgCreateValidator( - sdk.ValAddress(addrs[1]), ed25519.GenPrivKey().PubKey(), sdk.NewCoin(staking.DefaultBondDenom, valTokens2), testDescription, testCommissionMsg, sdk.OneInt(), + sdk.ValAddress(addrs[1]), ed25519.GenPrivKey().PubKey(), sdk.NewCoin(sdk.DefaultBondDenom, valTokens2), testDescription, testCommissionMsg, sdk.OneInt(), ) stakingHandler(ctx, val2CreateMsg) - valTokens3 := staking.TokensFromTendermintPower(7) + valTokens3 := sdk.TokensFromTendermintPower(7) val3CreateMsg := staking.NewMsgCreateValidator( - sdk.ValAddress(addrs[2]), ed25519.GenPrivKey().PubKey(), sdk.NewCoin(staking.DefaultBondDenom, valTokens3), testDescription, testCommissionMsg, sdk.OneInt(), + sdk.ValAddress(addrs[2]), ed25519.GenPrivKey().PubKey(), sdk.NewCoin(sdk.DefaultBondDenom, valTokens3), testDescription, testCommissionMsg, sdk.OneInt(), ) stakingHandler(ctx, val3CreateMsg) - delTokens := staking.TokensFromTendermintPower(10) - delegator1Msg := staking.NewMsgDelegate(addrs[3], sdk.ValAddress(addrs[2]), sdk.NewCoin(staking.DefaultBondDenom, delTokens)) + delTokens := sdk.TokensFromTendermintPower(10) + delegator1Msg := staking.NewMsgDelegate(addrs[3], sdk.ValAddress(addrs[2]), sdk.NewCoin(sdk.DefaultBondDenom, delTokens)) stakingHandler(ctx, delegator1Msg) - delegator1Msg2 := staking.NewMsgDelegate(addrs[3], sdk.ValAddress(addrs[1]), sdk.NewCoin(staking.DefaultBondDenom, delTokens)) + delegator1Msg2 := staking.NewMsgDelegate(addrs[3], sdk.ValAddress(addrs[1]), sdk.NewCoin(sdk.DefaultBondDenom, delTokens)) stakingHandler(ctx, delegator1Msg2) staking.EndBlocker(ctx, sk) @@ -483,11 +483,11 @@ func TestTallyJailedValidator(t *testing.T) { createValidators(t, stakingHandler, ctx, valAddrs, []int64{25, 6, 7}) staking.EndBlocker(ctx, sk) - delTokens := staking.TokensFromTendermintPower(10) - delegator1Msg := staking.NewMsgDelegate(addrs[3], sdk.ValAddress(addrs[2]), sdk.NewCoin(staking.DefaultBondDenom, delTokens)) + delTokens := sdk.TokensFromTendermintPower(10) + delegator1Msg := staking.NewMsgDelegate(addrs[3], sdk.ValAddress(addrs[2]), sdk.NewCoin(sdk.DefaultBondDenom, delTokens)) stakingHandler(ctx, delegator1Msg) - delegator1Msg2 := staking.NewMsgDelegate(addrs[3], sdk.ValAddress(addrs[1]), sdk.NewCoin(staking.DefaultBondDenom, delTokens)) + delegator1Msg2 := staking.NewMsgDelegate(addrs[3], sdk.ValAddress(addrs[1]), sdk.NewCoin(sdk.DefaultBondDenom, delTokens)) stakingHandler(ctx, delegator1Msg2) val2, found := sk.GetValidator(ctx, sdk.ValAddress(addrs[1])) diff --git a/x/gov/test_common.go b/x/gov/test_common.go index ee3b958506..0c0d74306e 100644 --- a/x/gov/test_common.go +++ b/x/gov/test_common.go @@ -16,7 +16,6 @@ import ( "github.com/cosmos/cosmos-sdk/x/bank" "github.com/cosmos/cosmos-sdk/x/mock" "github.com/cosmos/cosmos-sdk/x/staking" - "github.com/cosmos/cosmos-sdk/x/staking/types" ) // initialize the mock application for this module @@ -46,10 +45,10 @@ func getMockApp(t *testing.T, numGenAccs int, genState GenesisState, genAccs []a require.NoError(t, mapp.CompleteSetup(keyStaking, tkeyStaking, keyGov)) - valTokens := staking.TokensFromTendermintPower(42) + valTokens := sdk.TokensFromTendermintPower(42) if genAccs == nil || len(genAccs) == 0 { genAccs, addrs, pubKeys, privKeys = mock.CreateGenAccounts(numGenAccs, - sdk.Coins{sdk.NewCoin(staking.DefaultBondDenom, valTokens)}) + sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, valTokens)}) } mock.SetGenesis(mapp, genAccs) @@ -73,7 +72,7 @@ func getInitChainer(mapp *mock.App, keeper Keeper, stakingKeeper staking.Keeper, mapp.InitChainer(ctx, req) stakingGenesis := staking.DefaultGenesisState() - tokens := types.TokensFromTendermintPower(100000) + tokens := sdk.TokensFromTendermintPower(100000) stakingGenesis.Pool.NotBondedTokens = tokens validators, err := staking.InitGenesis(ctx, stakingKeeper, stakingGenesis) diff --git a/x/ibc/expected_keepers.go b/x/ibc/expected_keepers.go new file mode 100644 index 0000000000..f2b65f1624 --- /dev/null +++ b/x/ibc/expected_keepers.go @@ -0,0 +1,9 @@ +package ibc + +import sdk "github.com/cosmos/cosmos-sdk/types" + +// expected bank keeper +type BankKeeper interface { + AddCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) (sdk.Coins, sdk.Tags, sdk.Error) + SubtractCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) (sdk.Coins, sdk.Tags, sdk.Error) +} diff --git a/x/ibc/handler.go b/x/ibc/handler.go index c7bffc5293..afc3027682 100644 --- a/x/ibc/handler.go +++ b/x/ibc/handler.go @@ -2,10 +2,9 @@ package ibc import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/bank" ) -func NewHandler(ibcm Mapper, ck bank.Keeper) sdk.Handler { +func NewHandler(ibcm Mapper, ck BankKeeper) sdk.Handler { return func(ctx sdk.Context, msg sdk.Msg) sdk.Result { switch msg := msg.(type) { case IBCTransferMsg: @@ -20,7 +19,7 @@ func NewHandler(ibcm Mapper, ck bank.Keeper) sdk.Handler { } // IBCTransferMsg deducts coins from the account and creates an egress IBC packet. -func handleIBCTransferMsg(ctx sdk.Context, ibcm Mapper, ck bank.Keeper, msg IBCTransferMsg) sdk.Result { +func handleIBCTransferMsg(ctx sdk.Context, ibcm Mapper, ck BankKeeper, msg IBCTransferMsg) sdk.Result { packet := msg.IBCPacket _, _, err := ck.SubtractCoins(ctx, packet.SrcAddr, packet.Coins) @@ -37,7 +36,7 @@ func handleIBCTransferMsg(ctx sdk.Context, ibcm Mapper, ck bank.Keeper, msg IBCT } // IBCReceiveMsg adds coins to the destination address and creates an ingress IBC packet. -func handleIBCReceiveMsg(ctx sdk.Context, ibcm Mapper, ck bank.Keeper, msg IBCReceiveMsg) sdk.Result { +func handleIBCReceiveMsg(ctx sdk.Context, ibcm Mapper, ck BankKeeper, msg IBCReceiveMsg) sdk.Result { packet := msg.IBCPacket seq := ibcm.GetIngressSequence(ctx, packet.SrcChain) diff --git a/x/mint/params.go b/x/mint/params.go index 62018397d6..38366851eb 100644 --- a/x/mint/params.go +++ b/x/mint/params.go @@ -4,7 +4,6 @@ import ( "fmt" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/staking" ) // mint parameters @@ -33,7 +32,7 @@ func NewParams(mintDenom string, inflationRateChange, inflationMax, // default minting module parameters func DefaultParams() Params { return Params{ - MintDenom: staking.DefaultBondDenom, + MintDenom: sdk.DefaultBondDenom, InflationRateChange: sdk.NewDecWithPrec(13, 2), InflationMax: sdk.NewDecWithPrec(20, 2), InflationMin: sdk.NewDecWithPrec(7, 2), diff --git a/x/mock/app.go b/x/mock/app.go index e4826fc8f1..1864e39410 100644 --- a/x/mock/app.go +++ b/x/mock/app.go @@ -313,17 +313,6 @@ func RandomSetGenesis(r *rand.Rand, app *App, addrs []sdk.AccAddress, denoms []s app.GenesisAccounts = accts } -// GetAllAccounts returns all accounts in the accountKeeper. -func GetAllAccounts(mapper auth.AccountKeeper, ctx sdk.Context) []auth.Account { - accounts := []auth.Account{} - appendAccount := func(acc auth.Account) (stop bool) { - accounts = append(accounts, acc) - return false - } - mapper.IterateAccounts(ctx, appendAccount) - return accounts -} - // GenSequenceOfTxs generates a set of signed transactions of messages, such // that they differ only by having the sequence numbers incremented between // every transaction. diff --git a/x/mock/simulation/invariants.go b/x/mock/simulation/invariants.go deleted file mode 100644 index d30b67be9f..0000000000 --- a/x/mock/simulation/invariants.go +++ /dev/null @@ -1,35 +0,0 @@ -package simulation - -import ( - "fmt" - "testing" - - abci "github.com/tendermint/tendermint/abci/types" - - "github.com/cosmos/cosmos-sdk/baseapp" - sdk "github.com/cosmos/cosmos-sdk/types" -) - -// An Invariant is a function which tests a particular invariant. -// If the invariant has been broken, it should return an error -// containing a descriptive message about what happened. -// The simulator will then halt and print the logs. -type Invariant func(ctx sdk.Context) error - -// group of Invarient -type Invariants []Invariant - -// assertAll asserts the all invariants against application state -func (invs Invariants) assertAll(t *testing.T, app *baseapp.BaseApp, - event string, displayLogs func()) { - - ctx := app.NewContext(false, abci.Header{Height: app.LastBlockHeight() + 1}) - - for i := 0; i < len(invs); i++ { - if err := invs[i](ctx); err != nil { - fmt.Printf("Invariants broken after %s\n%s\n", event, err.Error()) - displayLogs() - t.Fatal() - } - } -} diff --git a/x/mock/simulation/simulate.go b/x/mock/simulation/simulate.go index 723955f6b3..e67bddc3c4 100644 --- a/x/mock/simulation/simulate.go +++ b/x/mock/simulation/simulate.go @@ -24,7 +24,7 @@ type AppStateFn func(r *rand.Rand, accs []Account, genesisTimestamp time.Time) ( // Simulate tests application by sending random messages. func Simulate(t *testing.T, app *baseapp.BaseApp, appStateFn AppStateFn, ops WeightedOperations, - invariants Invariants, numBlocks int, blockSize int, commit bool) (bool, error) { + invariants sdk.Invariants, numBlocks int, blockSize int, commit bool) (bool, error) { time := time.Now().UnixNano() return SimulateFromSeed(t, app, appStateFn, time, ops, @@ -54,7 +54,7 @@ func initChain( // TODO split this monster function up func SimulateFromSeed(tb testing.TB, app *baseapp.BaseApp, appStateFn AppStateFn, seed int64, ops WeightedOperations, - invariants Invariants, + invariants sdk.Invariants, numBlocks int, blockSize int, commit bool) (stopEarly bool, simError error) { // in case we have to end early, don't os.Exit so that we can run cleanup code. @@ -153,7 +153,7 @@ func SimulateFromSeed(tb testing.TB, app *baseapp.BaseApp, app.BeginBlock(request) if testingMode { - invariants.assertAll(t, app, "BeginBlock", displayLogs) + assertAllInvariants(t, app, invariants, "BeginBlock", displayLogs) } ctx := app.NewContext(false, header) @@ -171,14 +171,14 @@ func SimulateFromSeed(tb testing.TB, app *baseapp.BaseApp, logWriter, displayLogs, eventStats.tally) if testingMode && onOperation { - invariants.assertAll(t, app, "QueuedOperations", displayLogs) + assertAllInvariants(t, app, invariants, "QueuedOperations", displayLogs) } logWriter("Standard operations") operations := blockSimulator(r, app, ctx, accs, header, logWriter) opCount += operations + numQueuedOpsRan + numQueuedTimeOpsRan if testingMode { - invariants.assertAll(t, app, "StandardOperations", displayLogs) + assertAllInvariants(t, app, invariants, "StandardOperations", displayLogs) } res := app.EndBlock(abci.RequestEndBlock{}) @@ -191,7 +191,7 @@ func SimulateFromSeed(tb testing.TB, app *baseapp.BaseApp, logWriter("EndBlock") if testingMode { - invariants.assertAll(t, app, "EndBlock", displayLogs) + assertAllInvariants(t, app, invariants, "EndBlock", displayLogs) } if commit { app.Commit() @@ -236,7 +236,7 @@ type blockSimFn func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, // Returns a function to simulate blocks. Written like this to avoid constant // parameters being passed everytime, to minimize memory overhead. func createBlockSimulator(testingMode bool, tb testing.TB, t *testing.T, params Params, - event func(string), invariants Invariants, ops WeightedOperations, + event func(string), invariants sdk.Invariants, ops WeightedOperations, operationQueue OperationQueue, timeOperationQueue []FutureOperation, totalNumBlocks int, avgBlockSize int, displayLogs func()) blockSimFn { @@ -281,7 +281,7 @@ func createBlockSimulator(testingMode bool, tb testing.TB, t *testing.T, params if testingMode { if onOperation { eventStr := fmt.Sprintf("operation: %v", logUpdate) - invariants.assertAll(t, app, eventStr, displayLogs) + assertAllInvariants(t, app, invariants, eventStr, displayLogs) } if opCount%50 == 0 { fmt.Printf("\rSimulating... block %d/%d, operation %d/%d. ", diff --git a/x/mock/simulation/util.go b/x/mock/simulation/util.go index 7d127131b8..962dbfe43a 100644 --- a/x/mock/simulation/util.go +++ b/x/mock/simulation/util.go @@ -8,9 +8,26 @@ import ( "testing" "time" + "github.com/cosmos/cosmos-sdk/baseapp" sdk "github.com/cosmos/cosmos-sdk/types" + abci "github.com/tendermint/tendermint/abci/types" ) +// assertAll asserts the all invariants against application state +func assertAllInvariants(t *testing.T, app *baseapp.BaseApp, invs sdk.Invariants, + event string, displayLogs func()) { + + ctx := app.NewContext(false, abci.Header{Height: app.LastBlockHeight() + 1}) + + for i := 0; i < len(invs); i++ { + if err := invs[i](ctx); err != nil { + fmt.Printf("Invariants broken after %s\n%s\n", event, err.Error()) + displayLogs() + t.Fatal() + } + } +} + func getTestingMode(tb testing.TB) (testingMode bool, t *testing.T, b *testing.B) { testingMode = false if _t, ok := tb.(*testing.T); ok { @@ -112,7 +129,7 @@ func getBlockSize(r *rand.Rand, params Params, // NOTE this function is intended to be used manually used while running // computationally heavy simulations. // TODO reference this function in the codebase probably through use of a switch -func PeriodicInvariant(invariant Invariant, period int, offset int) Invariant { +func PeriodicInvariant(invariant sdk.Invariant, period int, offset int) sdk.Invariant { return func(ctx sdk.Context) error { if int(ctx.BlockHeight())%period == offset { return invariant(ctx) diff --git a/x/slashing/app_test.go b/x/slashing/app_test.go index 56f5a0e127..2ede44922c 100644 --- a/x/slashing/app_test.go +++ b/x/slashing/app_test.go @@ -61,7 +61,7 @@ func getInitChainer(mapp *mock.App, keeper staking.Keeper) sdk.InitChainer { return func(ctx sdk.Context, req abci.RequestInitChain) abci.ResponseInitChain { mapp.InitChainer(ctx, req) stakingGenesis := staking.DefaultGenesisState() - tokens := staking.TokensFromTendermintPower(100000) + tokens := sdk.TokensFromTendermintPower(100000) stakingGenesis.Pool.NotBondedTokens = tokens validators, err := staking.InitGenesis(ctx, keeper, stakingGenesis) if err != nil { @@ -93,10 +93,10 @@ func checkValidatorSigningInfo(t *testing.T, mapp *mock.App, keeper Keeper, func TestSlashingMsgs(t *testing.T) { mapp, stakingKeeper, keeper := getMockApp(t) - genTokens := staking.TokensFromTendermintPower(42) - bondTokens := staking.TokensFromTendermintPower(10) - genCoin := sdk.NewCoin(staking.DefaultBondDenom, genTokens) - bondCoin := sdk.NewCoin(staking.DefaultBondDenom, bondTokens) + genTokens := sdk.TokensFromTendermintPower(42) + bondTokens := sdk.TokensFromTendermintPower(10) + genCoin := sdk.NewCoin(sdk.DefaultBondDenom, genTokens) + bondCoin := sdk.NewCoin(sdk.DefaultBondDenom, bondTokens) acc1 := &auth.BaseAccount{ Address: addr1, diff --git a/x/slashing/genesis.go b/x/slashing/genesis.go index 8a6cfdee62..49c1a866b3 100644 --- a/x/slashing/genesis.go +++ b/x/slashing/genesis.go @@ -5,7 +5,6 @@ import ( "time" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/staking/types" ) // GenesisState - all slashing state that must be provided at genesis @@ -67,8 +66,8 @@ func ValidateGenesis(data GenesisState) error { // InitGenesis initialize default parameters // and the keeper's address to pubkey map -func InitGenesis(ctx sdk.Context, keeper Keeper, data GenesisState, sdata types.GenesisState) { - for _, validator := range sdata.Validators { +func InitGenesis(ctx sdk.Context, keeper Keeper, data GenesisState, validators []sdk.Validator) { + for _, validator := range validators { keeper.addPubkey(ctx, validator.GetConsPubKey()) } diff --git a/x/slashing/handler_test.go b/x/slashing/handler_test.go index 92311bd0f3..569fb54ad7 100644 --- a/x/slashing/handler_test.go +++ b/x/slashing/handler_test.go @@ -8,14 +8,13 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/staking" - "github.com/cosmos/cosmos-sdk/x/staking/types" ) func TestCannotUnjailUnlessJailed(t *testing.T) { // initial setup ctx, ck, sk, _, keeper := createTestInput(t, DefaultParams()) slh := NewHandler(keeper) - amt := types.TokensFromTendermintPower(100) + amt := sdk.TokensFromTendermintPower(100) addr, val := addrs[0], pks[0] msg := NewTestMsgCreateValidator(addr, val, amt) got := staking.NewHandler(sk)(ctx, msg) @@ -40,7 +39,7 @@ func TestCannotUnjailUnlessMeetMinSelfDelegation(t *testing.T) { ctx, ck, sk, _, keeper := createTestInput(t, DefaultParams()) slh := NewHandler(keeper) amtInt := int64(100) - addr, val, amt := addrs[0], pks[0], types.TokensFromTendermintPower(amtInt) + addr, val, amt := addrs[0], pks[0], sdk.TokensFromTendermintPower(amtInt) msg := NewTestMsgCreateValidator(addr, val, amt) msg.MinSelfDelegation = amt got := staking.NewHandler(sk)(ctx, msg) @@ -72,7 +71,7 @@ func TestJailedValidatorDelegations(t *testing.T) { stakingKeeper.SetParams(ctx, stakingParams) // create a validator - bondAmount := staking.TokensFromTendermintPower(10) + bondAmount := sdk.TokensFromTendermintPower(10) valPubKey := pks[0] valAddr, consAddr := addrs[1], sdk.ConsAddress(addrs[0]) diff --git a/x/slashing/keeper.go b/x/slashing/keeper.go index 036d2c6080..de3751a157 100644 --- a/x/slashing/keeper.go +++ b/x/slashing/keeper.go @@ -9,7 +9,6 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/params" - staking "github.com/cosmos/cosmos-sdk/x/staking" ) // Keeper of the slashing store @@ -86,7 +85,7 @@ func (k Keeper) handleDoubleSign(ctx sdk.Context, addr crypto.Address, infractio // Note that this *can* result in a negative "distributionHeight", up to -ValidatorUpdateDelay, // i.e. at the end of the pre-genesis block (none) = at the beginning of the genesis block. // That's fine since this is just used to filter unbonding delegations & redelegations. - distributionHeight := infractionHeight - staking.ValidatorUpdateDelay + distributionHeight := infractionHeight - sdk.ValidatorUpdateDelay // get the percentage slash penalty fraction fraction := k.SlashFractionDoubleSign(ctx) @@ -175,7 +174,7 @@ func (k Keeper) handleValidatorSignature(ctx sdk.Context, addr crypto.Address, p // Note that this *can* result in a negative "distributionHeight" up to -ValidatorUpdateDelay-1, // i.e. at the end of the pre-genesis block (none) = at the beginning of the genesis block. // That's fine since this is just used to filter unbonding delegations & redelegations. - distributionHeight := height - staking.ValidatorUpdateDelay - 1 + distributionHeight := height - sdk.ValidatorUpdateDelay - 1 k.validatorSet.Slash(ctx, consAddr, distributionHeight, power, k.SlashFractionDowntime(ctx)) k.validatorSet.Jail(ctx, consAddr) signInfo.JailedUntil = ctx.BlockHeader().Time.Add(k.DowntimeJailDuration(ctx)) diff --git a/x/slashing/keeper_test.go b/x/slashing/keeper_test.go index f43dccac8c..266e443cab 100644 --- a/x/slashing/keeper_test.go +++ b/x/slashing/keeper_test.go @@ -9,7 +9,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/staking" - "github.com/cosmos/cosmos-sdk/x/staking/types" ) // Have to change these parameters for tests @@ -32,7 +31,7 @@ func TestHandleDoubleSign(t *testing.T) { // validator added pre-genesis ctx = ctx.WithBlockHeight(-1) power := int64(100) - amt := staking.TokensFromTendermintPower(power) + amt := sdk.TokensFromTendermintPower(power) operatorAddr, val := addrs[0], pks[0] got := staking.NewHandler(sk)(ctx, NewTestMsgCreateValidator(operatorAddr, val, amt)) require.True(t, got.IsOK()) @@ -90,7 +89,7 @@ func TestPastMaxEvidenceAge(t *testing.T) { // validator added pre-genesis ctx = ctx.WithBlockHeight(-1) power := int64(100) - amt := staking.TokensFromTendermintPower(power) + amt := sdk.TokensFromTendermintPower(power) operatorAddr, val := addrs[0], pks[0] got := staking.NewHandler(sk)(ctx, NewTestMsgCreateValidator(operatorAddr, val, amt)) require.True(t, got.IsOK()) @@ -125,7 +124,7 @@ func TestHandleAbsentValidator(t *testing.T) { // initial setup ctx, ck, sk, _, keeper := createTestInput(t, keeperTestParams()) power := int64(100) - amt := staking.TokensFromTendermintPower(power) + amt := sdk.TokensFromTendermintPower(power) addr, val := addrs[0], pks[0] sh := staking.NewHandler(sk) slh := NewHandler(keeper) @@ -276,7 +275,7 @@ func TestHandleNewValidator(t *testing.T) { // initial setup ctx, ck, sk, _, keeper := createTestInput(t, keeperTestParams()) addr, val := addrs[0], pks[0] - amt := staking.TokensFromTendermintPower(100) + amt := sdk.TokensFromTendermintPower(100) sh := staking.NewHandler(sk) // 1000 first blocks not a validator @@ -309,7 +308,7 @@ func TestHandleNewValidator(t *testing.T) { validator, _ := sk.GetValidatorByConsAddr(ctx, sdk.GetConsAddress(val)) require.Equal(t, sdk.Bonded, validator.GetStatus()) pool := sk.GetPool(ctx) - expTokens := staking.TokensFromTendermintPower(100) + expTokens := sdk.TokensFromTendermintPower(100) require.Equal(t, expTokens, pool.BondedTokens) } @@ -320,7 +319,7 @@ func TestHandleAlreadyJailed(t *testing.T) { // initial setup ctx, _, sk, _, keeper := createTestInput(t, DefaultParams()) power := int64(100) - amt := staking.TokensFromTendermintPower(power) + amt := sdk.TokensFromTendermintPower(power) addr, val := addrs[0], pks[0] sh := staking.NewHandler(sk) got := sh(ctx, NewTestMsgCreateValidator(addr, val, amt)) @@ -348,7 +347,7 @@ func TestHandleAlreadyJailed(t *testing.T) { require.Equal(t, sdk.Unbonding, validator.GetStatus()) // validator should have been slashed - resultingTokens := amt.Sub(staking.TokensFromTendermintPower(1)) + resultingTokens := amt.Sub(sdk.TokensFromTendermintPower(1)) require.Equal(t, resultingTokens, validator.GetTokens()) // another block missed @@ -373,7 +372,7 @@ func TestValidatorDippingInAndOut(t *testing.T) { params.MaxValidators = 1 sk.SetParams(ctx, params) power := int64(100) - amt := staking.TokensFromTendermintPower(power) + amt := sdk.TokensFromTendermintPower(power) addr, val := addrs[0], pks[0] consAddr := sdk.ConsAddress(addr) sh := staking.NewHandler(sk) @@ -389,7 +388,7 @@ func TestValidatorDippingInAndOut(t *testing.T) { } // validator kicked out of validator set - newAmt := staking.TokensFromTendermintPower(101) + newAmt := sdk.TokensFromTendermintPower(101) got = sh(ctx, NewTestMsgCreateValidator(addrs[1], pks[1], newAmt)) require.True(t, got.IsOK()) validatorUpdates, _ := staking.EndBlocker(ctx, sk) @@ -402,7 +401,7 @@ func TestValidatorDippingInAndOut(t *testing.T) { ctx = ctx.WithBlockHeight(height) // validator added back in - delTokens := types.TokensFromTendermintPower(3) + delTokens := sdk.TokensFromTendermintPower(3) got = sh(ctx, newTestMsgDelegate(sdk.AccAddress(addrs[2]), addrs[0], delTokens)) require.True(t, got.IsOK()) validatorUpdates, _ = staking.EndBlocker(ctx, sk) diff --git a/x/slashing/keys.go b/x/slashing/keys.go index c2f491508c..ce3da1c7e6 100644 --- a/x/slashing/keys.go +++ b/x/slashing/keys.go @@ -4,7 +4,6 @@ import ( "encoding/binary" sdk "github.com/cosmos/cosmos-sdk/types" - staking "github.com/cosmos/cosmos-sdk/x/staking/types" ) const ( @@ -64,7 +63,7 @@ func GetValidatorSlashingPeriodPrefix(v sdk.ConsAddress) []byte { func GetValidatorSlashingPeriodKey(v sdk.ConsAddress, startHeight int64) []byte { b := make([]byte, 8) // this needs to be height + ValidatorUpdateDelay because the slashing period for genesis validators starts at height -ValidatorUpdateDelay - binary.BigEndian.PutUint64(b, uint64(startHeight+staking.ValidatorUpdateDelay)) + binary.BigEndian.PutUint64(b, uint64(startHeight+sdk.ValidatorUpdateDelay)) return append(GetValidatorSlashingPeriodPrefix(v), b...) } diff --git a/x/slashing/simulation/invariants.go b/x/slashing/simulation/invariants.go index c140a5eb92..1545db2c75 100644 --- a/x/slashing/simulation/invariants.go +++ b/x/slashing/simulation/invariants.go @@ -2,12 +2,11 @@ package simulation import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/mock/simulation" ) // TODO Any invariants to check here? // AllInvariants tests all slashing invariants -func AllInvariants() simulation.Invariant { +func AllInvariants() sdk.Invariant { return func(_ sdk.Context) error { return nil } diff --git a/x/slashing/simulation/msgs.go b/x/slashing/simulation/msgs.go index 2b09226f23..732b3c28c4 100644 --- a/x/slashing/simulation/msgs.go +++ b/x/slashing/simulation/msgs.go @@ -12,7 +12,10 @@ import ( // SimulateMsgUnjail func SimulateMsgUnjail(k slashing.Keeper) simulation.Operation { - return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simulation.Account, event func(string)) (action string, fOp []simulation.FutureOperation, err error) { + return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, + accs []simulation.Account, event func(string)) ( + action string, fOp []simulation.FutureOperation, err error) { + acc := simulation.RandomAcc(r, accs) address := sdk.ValAddress(acc.Address) msg := slashing.NewMsgUnjail(address) diff --git a/x/slashing/test_common.go b/x/slashing/test_common.go index 9b8736fc83..13279d614e 100644 --- a/x/slashing/test_common.go +++ b/x/slashing/test_common.go @@ -36,7 +36,7 @@ var ( sdk.ValAddress(pks[1].Address()), sdk.ValAddress(pks[2].Address()), } - initCoins = staking.TokensFromTendermintPower(200) + initCoins = sdk.TokensFromTendermintPower(200) ) func createTestCodec() *codec.Codec { @@ -91,7 +91,7 @@ func createTestInput(t *testing.T, defaults Params) (sdk.Context, bank.Keeper, s sk.SetHooks(keeper.Hooks()) require.NotPanics(t, func() { - InitGenesis(ctx, keeper, GenesisState{defaults, nil, nil}, genesis) + InitGenesis(ctx, keeper, GenesisState{defaults, nil, nil}, genesis.Validators.ToSDKValidators()) }) return ctx, ck, sk, paramstore, keeper @@ -115,12 +115,12 @@ func testAddr(addr string) sdk.AccAddress { func NewTestMsgCreateValidator(address sdk.ValAddress, pubKey crypto.PubKey, amt sdk.Int) staking.MsgCreateValidator { commission := staking.NewCommissionMsg(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()) return staking.NewMsgCreateValidator( - address, pubKey, sdk.NewCoin(staking.DefaultBondDenom, amt), + address, pubKey, sdk.NewCoin(sdk.DefaultBondDenom, amt), staking.Description{}, commission, sdk.OneInt(), ) } func newTestMsgDelegate(delAddr sdk.AccAddress, valAddr sdk.ValAddress, delAmount sdk.Int) staking.MsgDelegate { - amount := sdk.NewCoin(staking.DefaultBondDenom, delAmount) + amount := sdk.NewCoin(sdk.DefaultBondDenom, delAmount) return staking.NewMsgDelegate(delAddr, valAddr, amount) } diff --git a/x/slashing/tick_test.go b/x/slashing/tick_test.go index 2476ec99bd..cc0e5f13b4 100644 --- a/x/slashing/tick_test.go +++ b/x/slashing/tick_test.go @@ -10,13 +10,12 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/staking" - "github.com/cosmos/cosmos-sdk/x/staking/types" ) func TestBeginBlocker(t *testing.T) { ctx, ck, sk, _, keeper := createTestInput(t, DefaultParams()) power := int64(100) - amt := types.TokensFromTendermintPower(power) + amt := sdk.TokensFromTendermintPower(power) addr, pk := addrs[2], pks[2] // bond the validator diff --git a/x/staking/alias.go b/x/staking/alias.go index dd41da0c07..5e9ddaccd0 100644 --- a/x/staking/alias.go +++ b/x/staking/alias.go @@ -10,6 +10,9 @@ import ( type ( Keeper = keeper.Keeper + FeeCollectionKeeper = types.FeeCollectionKeeper + BankKeeper = types.BankKeeper + DistributionKeeper = types.DistributionKeeper Validator = types.Validator Validators = types.Validators Description = types.Description @@ -72,7 +75,6 @@ var ( KeyBondDenom = types.KeyBondDenom DefaultParams = types.DefaultParams - DefaultBondDenom = types.DefaultBondDenom InitialPool = types.InitialPool NewValidator = types.NewValidator NewDescription = types.NewDescription @@ -83,10 +85,6 @@ var ( DefaultGenesisState = types.DefaultGenesisState RegisterCodec = types.RegisterCodec - ValidatorUpdateDelay = types.ValidatorUpdateDelay - TokensToTendermintPower = types.TokensToTendermintPower - TokensFromTendermintPower = types.TokensFromTendermintPower - NewMsgCreateValidator = types.NewMsgCreateValidator NewMsgCreateValidatorOnBehalfOf = types.NewMsgCreateValidatorOnBehalfOf NewMsgEditValidator = types.NewMsgEditValidator diff --git a/x/staking/app_test.go b/x/staking/app_test.go index 53216a47d8..d9781201d2 100644 --- a/x/staking/app_test.go +++ b/x/staking/app_test.go @@ -51,7 +51,7 @@ func getInitChainer(mapp *mock.App, keeper Keeper) sdk.InitChainer { mapp.InitChainer(ctx, req) stakingGenesis := DefaultGenesisState() - tokens := TokensFromTendermintPower(100000) + tokens := sdk.TokensFromTendermintPower(100000) stakingGenesis.Pool.NotBondedTokens = tokens validators, err := InitGenesis(ctx, keeper, stakingGenesis) @@ -97,10 +97,10 @@ func checkDelegation( func TestStakingMsgs(t *testing.T) { mApp, keeper := getMockApp(t) - genTokens := TokensFromTendermintPower(42) - bondTokens := TokensFromTendermintPower(10) - genCoin := sdk.NewCoin(DefaultBondDenom, genTokens) - bondCoin := sdk.NewCoin(DefaultBondDenom, bondTokens) + genTokens := sdk.TokensFromTendermintPower(42) + bondTokens := sdk.TokensFromTendermintPower(10) + genCoin := sdk.NewCoin(sdk.DefaultBondDenom, genTokens) + bondCoin := sdk.NewCoin(sdk.DefaultBondDenom, bondTokens) acc1 := &auth.BaseAccount{ Address: addr1, diff --git a/x/staking/genesis.go b/x/staking/genesis.go index 8940378f18..1374e75be2 100644 --- a/x/staking/genesis.go +++ b/x/staking/genesis.go @@ -22,7 +22,7 @@ func InitGenesis(ctx sdk.Context, keeper Keeper, data types.GenesisState) (res [ // initialized for the validator set e.g. with a one-block offset - the // first TM block is at height 1, so state updates applied from // genesis.json are in block 0. - ctx = ctx.WithBlockHeight(1 - types.ValidatorUpdateDelay) + ctx = ctx.WithBlockHeight(1 - sdk.ValidatorUpdateDelay) keeper.SetPool(ctx, data.Pool) keeper.SetParams(ctx, data.Params) @@ -46,7 +46,7 @@ func InitGenesis(ctx sdk.Context, keeper Keeper, data types.GenesisState) (res [ } } - for _, delegation := range data.Bonds { + for _, delegation := range data.Delegations { // Call the before-creation hook if not exported if !data.Exported { keeper.BeforeDelegationCreated(ctx, delegation.DelegatorAddr, delegation.ValidatorAddr) @@ -99,7 +99,7 @@ func ExportGenesis(ctx sdk.Context, keeper Keeper) types.GenesisState { params := keeper.GetParams(ctx) lastTotalPower := keeper.GetLastTotalPower(ctx) validators := keeper.GetAllValidators(ctx) - bonds := keeper.GetAllDelegations(ctx) + delegations := keeper.GetAllDelegations(ctx) var unbondingDelegations []types.UnbondingDelegation keeper.IterateUnbondingDelegations(ctx, func(_ int64, ubd types.UnbondingDelegation) (stop bool) { unbondingDelegations = append(unbondingDelegations, ubd) @@ -122,7 +122,7 @@ func ExportGenesis(ctx sdk.Context, keeper Keeper) types.GenesisState { LastTotalPower: lastTotalPower, LastValidatorPowers: lastValidatorPowers, Validators: validators, - Bonds: bonds, + Delegations: delegations, UnbondingDelegations: unbondingDelegations, Redelegations: redelegations, Exported: true, diff --git a/x/staking/genesis_test.go b/x/staking/genesis_test.go index 9a9a716fef..82b076104a 100644 --- a/x/staking/genesis_test.go +++ b/x/staking/genesis_test.go @@ -20,8 +20,8 @@ func TestInitGenesis(t *testing.T) { ctx, _, keeper := keep.CreateTestInput(t, false, 1000) pool := keeper.GetPool(ctx) - pool.BondedTokens = TokensFromTendermintPower(2) - valTokens := TokensFromTendermintPower(1) + pool.BondedTokens = sdk.TokensFromTendermintPower(2) + valTokens := sdk.TokensFromTendermintPower(1) params := keeper.GetParams(ctx) validators := make([]Validator, 2) @@ -48,7 +48,7 @@ func TestInitGenesis(t *testing.T) { actualGenesis := ExportGenesis(ctx, keeper) require.Equal(t, genesisState.Pool, actualGenesis.Pool) require.Equal(t, genesisState.Params, actualGenesis.Params) - require.Equal(t, genesisState.Bonds, actualGenesis.Bonds) + require.Equal(t, genesisState.Delegations, actualGenesis.Delegations) require.EqualValues(t, keeper.GetAllValidators(ctx), actualGenesis.Validators) // now make sure the validators are bonded and intra-tx counters are correct @@ -76,7 +76,7 @@ func TestInitGenesisLargeValidatorSet(t *testing.T) { // Assigning 2 to the first 100 vals, 1 to the rest pool := keeper.GetPool(ctx) - bondedTokens := TokensFromTendermintPower(int64(200 + (size - 100))) + bondedTokens := sdk.TokensFromTendermintPower(int64(200 + (size - 100))) pool.BondedTokens = bondedTokens params := keeper.GetParams(ctx) @@ -89,9 +89,9 @@ func TestInitGenesisLargeValidatorSet(t *testing.T) { validators[i].Status = sdk.Bonded - tokens := TokensFromTendermintPower(1) + tokens := sdk.TokensFromTendermintPower(1) if i < 100 { - tokens = TokensFromTendermintPower(2) + tokens = sdk.TokensFromTendermintPower(2) } validators[i].Tokens = tokens validators[i].DelegatorShares = sdk.NewDecFromInt(tokens) diff --git a/x/staking/handler_test.go b/x/staking/handler_test.go index ef9391ed8d..2daea30e62 100644 --- a/x/staking/handler_test.go +++ b/x/staking/handler_test.go @@ -32,7 +32,7 @@ func TestValidatorByPowerIndex(t *testing.T) { validatorAddr, validatorAddr3 := sdk.ValAddress(keep.Addrs[0]), sdk.ValAddress(keep.Addrs[1]) initPower := int64(1000000) - initBond := TokensFromTendermintPower(initPower) + initBond := sdk.TokensFromTendermintPower(initPower) ctx, _, keeper := keep.CreateTestInput(t, false, initPower) _ = setInstantUnbondPeriod(keeper, ctx) @@ -113,7 +113,7 @@ func TestDuplicatesMsgCreateValidator(t *testing.T) { addr1, addr2 := sdk.ValAddress(keep.Addrs[0]), sdk.ValAddress(keep.Addrs[1]) pk1, pk2 := keep.PKs[0], keep.PKs[1] - valTokens := types.TokensFromTendermintPower(10) + valTokens := sdk.TokensFromTendermintPower(10) msgCreateValidator1 := NewTestMsgCreateValidator(addr1, pk1, valTokens) got := handleMsgCreateValidator(ctx, msgCreateValidator1, keeper) require.True(t, got.IsOK(), "%v", got) @@ -184,7 +184,7 @@ func TestDuplicatesMsgCreateValidatorOnBehalfOf(t *testing.T) { validatorAddr := sdk.ValAddress(keep.Addrs[0]) delegatorAddr := keep.Addrs[1] pk := keep.PKs[0] - valTokens := types.TokensFromTendermintPower(10) + valTokens := sdk.TokensFromTendermintPower(10) msgCreateValidatorOnBehalfOf := NewTestMsgCreateValidatorOnBehalfOf(delegatorAddr, validatorAddr, pk, valTokens) got := handleMsgCreateValidator(ctx, msgCreateValidatorOnBehalfOf, keeper) require.True(t, got.IsOK(), "%v", got) @@ -214,7 +214,7 @@ func TestLegacyValidatorDelegations(t *testing.T) { ctx, _, keeper := keep.CreateTestInput(t, false, int64(1000)) setInstantUnbondPeriod(keeper, ctx) - bondAmount := TokensFromTendermintPower(10) + bondAmount := sdk.TokensFromTendermintPower(10) valAddr := sdk.ValAddress(keep.Addrs[0]) valConsPubKey, valConsAddr := keep.PKs[0], sdk.ConsAddress(keep.PKs[0].Address()) delAddr := keep.Addrs[1] @@ -247,7 +247,7 @@ func TestLegacyValidatorDelegations(t *testing.T) { require.Equal(t, bondAmount.MulRaw(2), validator.BondedTokens()) // unbond validator total self-delegations (which should jail the validator) - unbondShares := types.TokensFromTendermintPower(10) + unbondShares := sdk.TokensFromTendermintPower(10) msgUndelegate := NewMsgUndelegate(sdk.AccAddress(valAddr), valAddr, sdk.NewDecFromInt(unbondShares)) got = handleMsgUndelegate(ctx, msgUndelegate, keeper) @@ -304,11 +304,11 @@ func TestLegacyValidatorDelegations(t *testing.T) { func TestIncrementsMsgDelegate(t *testing.T) { initPower := int64(1000) - initBond := TokensFromTendermintPower(initPower) + initBond := sdk.TokensFromTendermintPower(initPower) ctx, accMapper, keeper := keep.CreateTestInput(t, false, initPower) params := keeper.GetParams(ctx) - bondAmount := TokensFromTendermintPower(10) + bondAmount := sdk.TokensFromTendermintPower(10) validatorAddr, delegatorAddr := sdk.ValAddress(keep.Addrs[0]), keep.Addrs[1] // first create validator @@ -379,7 +379,7 @@ func TestEditValidatorDecreaseMinSelfDelegation(t *testing.T) { validatorAddr := sdk.ValAddress(keep.Addrs[0]) initPower := int64(100) - initBond := types.TokensFromTendermintPower(100) + initBond := sdk.TokensFromTendermintPower(100) ctx, _, keeper := keep.CreateTestInput(t, false, initPower) _ = setInstantUnbondPeriod(keeper, ctx) @@ -411,7 +411,7 @@ func TestEditValidatorIncreaseMinSelfDelegationBeyondCurrentBond(t *testing.T) { validatorAddr := sdk.ValAddress(keep.Addrs[0]) initPower := int64(100) - initBond := types.TokensFromTendermintPower(100) + initBond := sdk.TokensFromTendermintPower(100) ctx, _, keeper := keep.CreateTestInput(t, false, initPower) _ = setInstantUnbondPeriod(keeper, ctx) @@ -441,7 +441,7 @@ func TestEditValidatorIncreaseMinSelfDelegationBeyondCurrentBond(t *testing.T) { func TestIncrementsMsgUnbond(t *testing.T) { initPower := int64(1000) - initBond := TokensFromTendermintPower(initPower) + initBond := sdk.TokensFromTendermintPower(initPower) ctx, accMapper, keeper := keep.CreateTestInput(t, false, initPower) params := setInstantUnbondPeriod(keeper, ctx) denom := params.BondDenom @@ -515,8 +515,8 @@ func TestIncrementsMsgUnbond(t *testing.T) { errorCases := []sdk.Int{ //1<<64 - 1, // more than int64 power //1<<63 + 1, // more than int64 power - types.TokensFromTendermintPower(1<<63 - 1), - types.TokensFromTendermintPower(1 << 31), + sdk.TokensFromTendermintPower(1<<63 - 1), + sdk.TokensFromTendermintPower(1 << 31), initBond, } for i, c := range errorCases { @@ -545,7 +545,7 @@ func TestIncrementsMsgUnbond(t *testing.T) { func TestMultipleMsgCreateValidator(t *testing.T) { initPower := int64(1000) - initTokens := types.TokensFromTendermintPower(initPower) + initTokens := sdk.TokensFromTendermintPower(initPower) ctx, accMapper, keeper := keep.CreateTestInput(t, false, initPower) params := setInstantUnbondPeriod(keeper, ctx) @@ -562,7 +562,7 @@ func TestMultipleMsgCreateValidator(t *testing.T) { // bond them all for i, validatorAddr := range validatorAddrs { - valTokens := types.TokensFromTendermintPower(10) + valTokens := sdk.TokensFromTendermintPower(10) msgCreateValidatorOnBehalfOf := NewTestMsgCreateValidatorOnBehalfOf( delegatorAddrs[i], validatorAddr, keep.PKs[i], valTokens) got := handleMsgCreateValidator(ctx, msgCreateValidatorOnBehalfOf, keeper) @@ -583,7 +583,7 @@ func TestMultipleMsgCreateValidator(t *testing.T) { for i, validatorAddr := range validatorAddrs { _, found := keeper.GetValidator(ctx, validatorAddr) require.True(t, found) - unbondingTokens := types.TokensFromTendermintPower(10) + unbondingTokens := sdk.TokensFromTendermintPower(10) msgUndelegate := NewMsgUndelegate(delegatorAddrs[i], validatorAddr, sdk.NewDecFromInt(unbondingTokens)) // remove delegation got := handleMsgUndelegate(ctx, msgUndelegate, keeper) require.True(t, got.IsOK(), "expected msg %d to be ok, got %v", i, got) @@ -695,13 +695,13 @@ func TestValidatorQueue(t *testing.T) { keeper.SetParams(ctx, params) // create the validator - valTokens := types.TokensFromTendermintPower(10) + valTokens := sdk.TokensFromTendermintPower(10) msgCreateValidator := NewTestMsgCreateValidator(validatorAddr, keep.PKs[0], valTokens) got := handleMsgCreateValidator(ctx, msgCreateValidator, keeper) require.True(t, got.IsOK(), "expected no error on runMsgCreateValidator") // bond a delegator - delTokens := types.TokensFromTendermintPower(10) + delTokens := sdk.TokensFromTendermintPower(10) msgDelegate := NewTestMsgDelegate(delegatorAddr, validatorAddr, delTokens) got = handleMsgDelegate(ctx, msgDelegate, keeper) require.True(t, got.IsOK(), "expected ok, got %v", got) @@ -748,7 +748,7 @@ func TestUnbondingPeriod(t *testing.T) { keeper.SetParams(ctx, params) // create the validator - valTokens := types.TokensFromTendermintPower(10) + valTokens := sdk.TokensFromTendermintPower(10) msgCreateValidator := NewTestMsgCreateValidator(validatorAddr, keep.PKs[0], valTokens) got := handleMsgCreateValidator(ctx, msgCreateValidator, keeper) require.True(t, got.IsOK(), "expected no error on runMsgCreateValidator") @@ -756,7 +756,7 @@ func TestUnbondingPeriod(t *testing.T) { EndBlocker(ctx, keeper) // begin unbonding - unbondingTokens := types.TokensFromTendermintPower(10) + unbondingTokens := sdk.TokensFromTendermintPower(10) msgUndelegate := NewMsgUndelegate(sdk.AccAddress(validatorAddr), validatorAddr, sdk.NewDecFromInt(unbondingTokens)) got = handleMsgUndelegate(ctx, msgUndelegate, keeper) @@ -936,7 +936,7 @@ func TestMultipleRedelegationAtSameTime(t *testing.T) { keeper.SetParams(ctx, params) // create the validators - valTokens := types.TokensFromTendermintPower(10) + valTokens := sdk.TokensFromTendermintPower(10) msgCreateValidator := NewTestMsgCreateValidator(valAddr, keep.PKs[0], valTokens) got := handleMsgCreateValidator(ctx, msgCreateValidator, keeper) require.True(t, got.IsOK(), "expected no error on runMsgCreateValidator") @@ -988,7 +988,7 @@ func TestMultipleRedelegationAtUniqueTimes(t *testing.T) { keeper.SetParams(ctx, params) // create the validators - valTokens := types.TokensFromTendermintPower(10) + valTokens := sdk.TokensFromTendermintPower(10) msgCreateValidator := NewTestMsgCreateValidator(valAddr, keep.PKs[0], valTokens) got := handleMsgCreateValidator(ctx, msgCreateValidator, keeper) require.True(t, got.IsOK(), "expected no error on runMsgCreateValidator") @@ -1041,7 +1041,7 @@ func TestMultipleUnbondingDelegationAtSameTime(t *testing.T) { keeper.SetParams(ctx, params) // create the validator - valTokens := types.TokensFromTendermintPower(10) + valTokens := sdk.TokensFromTendermintPower(10) msgCreateValidator := NewTestMsgCreateValidator(valAddr, keep.PKs[0], valTokens) got := handleMsgCreateValidator(ctx, msgCreateValidator, keeper) require.True(t, got.IsOK(), "expected no error on runMsgCreateValidator") @@ -1087,7 +1087,7 @@ func TestMultipleUnbondingDelegationAtUniqueTimes(t *testing.T) { keeper.SetParams(ctx, params) // create the validator - valTokens := types.TokensFromTendermintPower(10) + valTokens := sdk.TokensFromTendermintPower(10) msgCreateValidator := NewTestMsgCreateValidator(valAddr, keep.PKs[0], valTokens) got := handleMsgCreateValidator(ctx, msgCreateValidator, keeper) require.True(t, got.IsOK(), "expected no error on runMsgCreateValidator") @@ -1143,7 +1143,7 @@ func TestUnbondingWhenExcessValidators(t *testing.T) { keeper.SetParams(ctx, params) // add three validators - valTokens1 := types.TokensFromTendermintPower(50) + valTokens1 := sdk.TokensFromTendermintPower(50) msgCreateValidator := NewTestMsgCreateValidator(validatorAddr1, keep.PKs[0], valTokens1) got := handleMsgCreateValidator(ctx, msgCreateValidator, keeper) require.True(t, got.IsOK(), "expected no error on runMsgCreateValidator") @@ -1151,7 +1151,7 @@ func TestUnbondingWhenExcessValidators(t *testing.T) { keeper.ApplyAndReturnValidatorSetUpdates(ctx) require.Equal(t, 1, len(keeper.GetLastValidators(ctx))) - valTokens2 := types.TokensFromTendermintPower(30) + valTokens2 := sdk.TokensFromTendermintPower(30) msgCreateValidator = NewTestMsgCreateValidator(validatorAddr2, keep.PKs[1], valTokens2) got = handleMsgCreateValidator(ctx, msgCreateValidator, keeper) require.True(t, got.IsOK(), "expected no error on runMsgCreateValidator") @@ -1159,7 +1159,7 @@ func TestUnbondingWhenExcessValidators(t *testing.T) { keeper.ApplyAndReturnValidatorSetUpdates(ctx) require.Equal(t, 2, len(keeper.GetLastValidators(ctx))) - valTokens3 := types.TokensFromTendermintPower(10) + valTokens3 := sdk.TokensFromTendermintPower(10) msgCreateValidator = NewTestMsgCreateValidator(validatorAddr3, keep.PKs[2], valTokens3) got = handleMsgCreateValidator(ctx, msgCreateValidator, keeper) require.True(t, got.IsOK(), "expected no error on runMsgCreateValidator") @@ -1190,7 +1190,7 @@ func TestBondUnbondRedelegateSlashTwice(t *testing.T) { valA, valB, del := sdk.ValAddress(keep.Addrs[0]), sdk.ValAddress(keep.Addrs[1]), keep.Addrs[2] consAddr0 := sdk.ConsAddress(keep.PKs[0].Address()) - valTokens := types.TokensFromTendermintPower(10) + valTokens := sdk.TokensFromTendermintPower(10) msgCreateValidator := NewTestMsgCreateValidator(valA, keep.PKs[0], valTokens) got := handleMsgCreateValidator(ctx, msgCreateValidator, keeper) require.True(t, got.IsOK(), "expected no error on runMsgCreateValidator") @@ -1212,13 +1212,13 @@ func TestBondUnbondRedelegateSlashTwice(t *testing.T) { ctx = ctx.WithBlockHeight(1) // begin unbonding 4 stake - ubdTokens := types.TokensFromTendermintPower(4) + ubdTokens := sdk.TokensFromTendermintPower(4) msgUndelegate := NewMsgUndelegate(del, valA, sdk.NewDecFromInt(ubdTokens)) got = handleMsgUndelegate(ctx, msgUndelegate, keeper) require.True(t, got.IsOK(), "expected no error on runMsgUndelegate") // begin redelegate 6 stake - rdTokens := types.TokensFromTendermintPower(6) + rdTokens := sdk.TokensFromTendermintPower(6) msgBeginRedelegate := NewMsgBeginRedelegate(del, valA, valB, sdk.NewDecFromInt(rdTokens)) got = handleMsgBeginRedelegate(ctx, msgBeginRedelegate, keeper) require.True(t, got.IsOK(), "expected no error on runMsgBeginRedelegate") diff --git a/x/staking/keeper/sdk_types.go b/x/staking/keeper/alias_functions.go similarity index 89% rename from x/staking/keeper/sdk_types.go rename to x/staking/keeper/alias_functions.go index ad52c8b25e..848f660518 100644 --- a/x/staking/keeper/sdk_types.go +++ b/x/staking/keeper/alias_functions.go @@ -142,3 +142,17 @@ func (k Keeper) IterateDelegations(ctx sdk.Context, delAddr sdk.AccAddress, i++ } } + +// return all delegations used during genesis dump +// TODO: remove this func, change all usage for iterate functionality +func (k Keeper) GetAllSDKDelegations(ctx sdk.Context) (delegations []sdk.Delegation) { + store := ctx.KVStore(k.storeKey) + iterator := sdk.KVStorePrefixIterator(store, DelegationKey) + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + delegation := types.MustUnmarshalDelegation(k.cdc, iterator.Value()) + delegations = append(delegations, delegation) + } + return delegations +} diff --git a/x/staking/keeper/delegation_test.go b/x/staking/keeper/delegation_test.go index 6a1526fc30..45c6320c50 100644 --- a/x/staking/keeper/delegation_test.go +++ b/x/staking/keeper/delegation_test.go @@ -171,7 +171,7 @@ func TestUnbondingDelegation(t *testing.T) { func TestUnbondDelegation(t *testing.T) { ctx, _, keeper := CreateTestInput(t, false, 0) pool := keeper.GetPool(ctx) - startTokens := types.TokensFromTendermintPower(10) + startTokens := sdk.TokensFromTendermintPower(10) pool.NotBondedTokens = startTokens //create a validator and a delegator to that validator @@ -188,7 +188,7 @@ func TestUnbondDelegation(t *testing.T) { delegation := types.NewDelegation(addrDels[0], addrVals[0], issuedShares) keeper.SetDelegation(ctx, delegation) - bondTokens := types.TokensFromTendermintPower(6) + bondTokens := sdk.TokensFromTendermintPower(6) amount, err := keeper.unbond(ctx, addrDels[0], addrVals[0], sdk.NewDecFromInt(bondTokens)) require.NoError(t, err) require.Equal(t, bondTokens, amount) // shares to be added to an unbonding delegation @@ -209,7 +209,7 @@ func TestUnbondDelegation(t *testing.T) { func TestUnbondingDelegationsMaxEntries(t *testing.T) { ctx, _, keeper := CreateTestInput(t, false, 0) pool := keeper.GetPool(ctx) - startTokens := types.TokensFromTendermintPower(10) + startTokens := sdk.TokensFromTendermintPower(10) pool.NotBondedTokens = startTokens // create a validator and a delegator to that validator @@ -256,13 +256,13 @@ func TestUndelegateSelfDelegationBelowMinSelfDelegation(t *testing.T) { ctx, _, keeper := CreateTestInput(t, false, 0) pool := keeper.GetPool(ctx) - startTokens := types.TokensFromTendermintPower(20) + startTokens := sdk.TokensFromTendermintPower(20) pool.NotBondedTokens = startTokens //create a validator with a self-delegation validator := types.NewValidator(addrVals[0], PKs[0], types.Description{}) - valTokens := types.TokensFromTendermintPower(10) + valTokens := sdk.TokensFromTendermintPower(10) validator.MinSelfDelegation = valTokens validator, pool, issuedShares := validator.AddTokensFromDel(pool, valTokens) require.Equal(t, valTokens, issuedShares.RoundInt()) @@ -275,7 +275,7 @@ func TestUndelegateSelfDelegationBelowMinSelfDelegation(t *testing.T) { // create a second delegation to this validator keeper.DeleteValidatorByPowerIndex(ctx, validator) - delTokens := types.TokensFromTendermintPower(10) + delTokens := sdk.TokensFromTendermintPower(10) validator, pool, issuedShares = validator.AddTokensFromDel(pool, delTokens) require.Equal(t, delTokens, issuedShares.RoundInt()) keeper.SetPool(ctx, pool) @@ -285,7 +285,7 @@ func TestUndelegateSelfDelegationBelowMinSelfDelegation(t *testing.T) { keeper.SetDelegation(ctx, delegation) val0AccAddr := sdk.AccAddress(addrVals[0].Bytes()) - _, err := keeper.Undelegate(ctx, val0AccAddr, addrVals[0], sdk.NewDecFromInt(types.TokensFromTendermintPower(6))) + _, err := keeper.Undelegate(ctx, val0AccAddr, addrVals[0], sdk.NewDecFromInt(sdk.TokensFromTendermintPower(6))) require.NoError(t, err) // end block @@ -294,7 +294,7 @@ func TestUndelegateSelfDelegationBelowMinSelfDelegation(t *testing.T) { validator, found := keeper.GetValidator(ctx, addrVals[0]) require.True(t, found) - require.Equal(t, types.TokensFromTendermintPower(14), validator.Tokens) + require.Equal(t, sdk.TokensFromTendermintPower(14), validator.Tokens) require.Equal(t, sdk.Unbonding, validator.Status) require.True(t, validator.Jailed) } @@ -302,13 +302,13 @@ func TestUndelegateSelfDelegationBelowMinSelfDelegation(t *testing.T) { func TestUndelegateFromUnbondingValidator(t *testing.T) { ctx, _, keeper := CreateTestInput(t, false, 0) pool := keeper.GetPool(ctx) - startTokens := types.TokensFromTendermintPower(20) + startTokens := sdk.TokensFromTendermintPower(20) pool.NotBondedTokens = startTokens //create a validator with a self-delegation validator := types.NewValidator(addrVals[0], PKs[0], types.Description{}) - valTokens := types.TokensFromTendermintPower(10) + valTokens := sdk.TokensFromTendermintPower(10) validator, pool, issuedShares := validator.AddTokensFromDel(pool, valTokens) require.Equal(t, valTokens, issuedShares.RoundInt()) keeper.SetPool(ctx, pool) @@ -319,7 +319,7 @@ func TestUndelegateFromUnbondingValidator(t *testing.T) { // create a second delegation to this validator keeper.DeleteValidatorByPowerIndex(ctx, validator) - delTokens := types.TokensFromTendermintPower(10) + delTokens := sdk.TokensFromTendermintPower(10) validator, pool, issuedShares = validator.AddTokensFromDel(pool, delTokens) require.Equal(t, delTokens, issuedShares.RoundInt()) keeper.SetPool(ctx, pool) @@ -374,13 +374,13 @@ func TestUndelegateFromUnbondingValidator(t *testing.T) { func TestUndelegateFromUnbondedValidator(t *testing.T) { ctx, _, keeper := CreateTestInput(t, false, 0) pool := keeper.GetPool(ctx) - startTokens := types.TokensFromTendermintPower(20) + startTokens := sdk.TokensFromTendermintPower(20) pool.NotBondedTokens = startTokens //create a validator with a self-delegation validator := types.NewValidator(addrVals[0], PKs[0], types.Description{}) - valTokens := types.TokensFromTendermintPower(10) + valTokens := sdk.TokensFromTendermintPower(10) validator, pool, issuedShares := validator.AddTokensFromDel(pool, valTokens) require.Equal(t, valTokens, issuedShares.RoundInt()) keeper.SetPool(ctx, pool) @@ -392,7 +392,7 @@ func TestUndelegateFromUnbondedValidator(t *testing.T) { // create a second delegation to this validator keeper.DeleteValidatorByPowerIndex(ctx, validator) - delTokens := types.TokensFromTendermintPower(10) + delTokens := sdk.TokensFromTendermintPower(10) validator, pool, issuedShares = validator.AddTokensFromDel(pool, delTokens) require.Equal(t, delTokens, issuedShares.RoundInt()) keeper.SetPool(ctx, pool) @@ -428,7 +428,7 @@ func TestUndelegateFromUnbondedValidator(t *testing.T) { require.Equal(t, validator.Status, sdk.Unbonded) // unbond some of the other delegation's shares - unbondTokens := types.TokensFromTendermintPower(6) + unbondTokens := sdk.TokensFromTendermintPower(6) _, err = keeper.Undelegate(ctx, addrDels[0], addrVals[0], sdk.NewDecFromInt(unbondTokens)) require.NoError(t, err) @@ -449,13 +449,13 @@ func TestUndelegateFromUnbondedValidator(t *testing.T) { func TestUnbondingAllDelegationFromValidator(t *testing.T) { ctx, _, keeper := CreateTestInput(t, false, 0) pool := keeper.GetPool(ctx) - startTokens := types.TokensFromTendermintPower(20) + startTokens := sdk.TokensFromTendermintPower(20) pool.NotBondedTokens = startTokens //create a validator with a self-delegation validator := types.NewValidator(addrVals[0], PKs[0], types.Description{}) - valTokens := types.TokensFromTendermintPower(10) + valTokens := sdk.TokensFromTendermintPower(10) validator, pool, issuedShares := validator.AddTokensFromDel(pool, valTokens) require.Equal(t, valTokens, issuedShares.RoundInt()) keeper.SetPool(ctx, pool) @@ -467,7 +467,7 @@ func TestUnbondingAllDelegationFromValidator(t *testing.T) { // create a second delegation to this validator keeper.DeleteValidatorByPowerIndex(ctx, validator) - delTokens := types.TokensFromTendermintPower(10) + delTokens := sdk.TokensFromTendermintPower(10) validator, pool, issuedShares = validator.AddTokensFromDel(pool, delTokens) require.Equal(t, delTokens, issuedShares.RoundInt()) keeper.SetPool(ctx, pool) @@ -593,12 +593,12 @@ func TestRedelegation(t *testing.T) { func TestRedelegateToSameValidator(t *testing.T) { ctx, _, keeper := CreateTestInput(t, false, 0) pool := keeper.GetPool(ctx) - startTokens := types.TokensFromTendermintPower(30) + startTokens := sdk.TokensFromTendermintPower(30) pool.NotBondedTokens = startTokens // create a validator with a self-delegation validator := types.NewValidator(addrVals[0], PKs[0], types.Description{}) - valTokens := types.TokensFromTendermintPower(10) + valTokens := sdk.TokensFromTendermintPower(10) validator, pool, issuedShares := validator.AddTokensFromDel(pool, valTokens) require.Equal(t, valTokens, issuedShares.RoundInt()) keeper.SetPool(ctx, pool) @@ -616,12 +616,12 @@ func TestRedelegateToSameValidator(t *testing.T) { func TestRedelegationMaxEntries(t *testing.T) { ctx, _, keeper := CreateTestInput(t, false, 0) pool := keeper.GetPool(ctx) - startTokens := types.TokensFromTendermintPower(20) + startTokens := sdk.TokensFromTendermintPower(20) pool.NotBondedTokens = startTokens // create a validator with a self-delegation validator := types.NewValidator(addrVals[0], PKs[0], types.Description{}) - valTokens := types.TokensFromTendermintPower(10) + valTokens := sdk.TokensFromTendermintPower(10) validator, pool, issuedShares := validator.AddTokensFromDel(pool, valTokens) require.Equal(t, valTokens, issuedShares.RoundInt()) keeper.SetPool(ctx, pool) @@ -667,12 +667,12 @@ func TestRedelegationMaxEntries(t *testing.T) { func TestRedelegateSelfDelegation(t *testing.T) { ctx, _, keeper := CreateTestInput(t, false, 0) pool := keeper.GetPool(ctx) - startTokens := types.TokensFromTendermintPower(30) + startTokens := sdk.TokensFromTendermintPower(30) pool.NotBondedTokens = startTokens //create a validator with a self-delegation validator := types.NewValidator(addrVals[0], PKs[0], types.Description{}) - valTokens := types.TokensFromTendermintPower(10) + valTokens := sdk.TokensFromTendermintPower(10) validator, pool, issuedShares := validator.AddTokensFromDel(pool, valTokens) require.Equal(t, valTokens, issuedShares.RoundInt()) keeper.SetPool(ctx, pool) @@ -692,7 +692,7 @@ func TestRedelegateSelfDelegation(t *testing.T) { require.Equal(t, sdk.Bonded, validator2.Status) // create a second delegation to validator 1 - delTokens := types.TokensFromTendermintPower(10) + delTokens := sdk.TokensFromTendermintPower(10) validator, pool, issuedShares = validator.AddTokensFromDel(pool, delTokens) require.Equal(t, delTokens, issuedShares.RoundInt()) keeper.SetPool(ctx, pool) @@ -718,13 +718,13 @@ func TestRedelegateSelfDelegation(t *testing.T) { func TestRedelegateFromUnbondingValidator(t *testing.T) { ctx, _, keeper := CreateTestInput(t, false, 0) pool := keeper.GetPool(ctx) - startTokens := types.TokensFromTendermintPower(30) + startTokens := sdk.TokensFromTendermintPower(30) pool.NotBondedTokens = startTokens //create a validator with a self-delegation validator := types.NewValidator(addrVals[0], PKs[0], types.Description{}) - valTokens := types.TokensFromTendermintPower(10) + valTokens := sdk.TokensFromTendermintPower(10) validator, pool, issuedShares := validator.AddTokensFromDel(pool, valTokens) require.Equal(t, valTokens, issuedShares.RoundInt()) keeper.SetPool(ctx, pool) @@ -736,7 +736,7 @@ func TestRedelegateFromUnbondingValidator(t *testing.T) { // create a second delegation to this validator keeper.DeleteValidatorByPowerIndex(ctx, validator) - delTokens := types.TokensFromTendermintPower(10) + delTokens := sdk.TokensFromTendermintPower(10) validator, pool, issuedShares = validator.AddTokensFromDel(pool, delTokens) require.Equal(t, delTokens, issuedShares.RoundInt()) keeper.SetPool(ctx, pool) @@ -782,7 +782,7 @@ func TestRedelegateFromUnbondingValidator(t *testing.T) { ctx = ctx.WithBlockHeader(header) // unbond some of the other delegation's shares - redelegateTokens := types.TokensFromTendermintPower(6) + redelegateTokens := sdk.TokensFromTendermintPower(6) _, err = keeper.BeginRedelegation(ctx, addrDels[0], addrVals[0], addrVals[1], sdk.NewDecFromInt(redelegateTokens)) require.NoError(t, err) @@ -797,13 +797,13 @@ func TestRedelegateFromUnbondingValidator(t *testing.T) { func TestRedelegateFromUnbondedValidator(t *testing.T) { ctx, _, keeper := CreateTestInput(t, false, 0) pool := keeper.GetPool(ctx) - startTokens := types.TokensFromTendermintPower(30) + startTokens := sdk.TokensFromTendermintPower(30) pool.NotBondedTokens = startTokens //create a validator with a self-delegation validator := types.NewValidator(addrVals[0], PKs[0], types.Description{}) - valTokens := types.TokensFromTendermintPower(10) + valTokens := sdk.TokensFromTendermintPower(10) validator, pool, issuedShares := validator.AddTokensFromDel(pool, valTokens) require.Equal(t, valTokens, issuedShares.RoundInt()) keeper.SetPool(ctx, pool) @@ -815,7 +815,7 @@ func TestRedelegateFromUnbondedValidator(t *testing.T) { // create a second delegation to this validator keeper.DeleteValidatorByPowerIndex(ctx, validator) - delTokens := types.TokensFromTendermintPower(10) + delTokens := sdk.TokensFromTendermintPower(10) validator, pool, issuedShares = validator.AddTokensFromDel(pool, delTokens) require.Equal(t, delTokens, issuedShares.RoundInt()) keeper.SetPool(ctx, pool) @@ -853,7 +853,7 @@ func TestRedelegateFromUnbondedValidator(t *testing.T) { keeper.unbondingToUnbonded(ctx, validator) // redelegate some of the delegation's shares - redelegationTokens := types.TokensFromTendermintPower(6) + redelegationTokens := sdk.TokensFromTendermintPower(6) _, err = keeper.BeginRedelegation(ctx, addrDels[0], addrVals[0], addrVals[1], sdk.NewDecFromInt(redelegationTokens)) require.NoError(t, err) diff --git a/x/staking/keeper/keeper.go b/x/staking/keeper/keeper.go index d1e82cb225..bfd60fa7ba 100644 --- a/x/staking/keeper/keeper.go +++ b/x/staking/keeper/keeper.go @@ -6,7 +6,6 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/bank" "github.com/cosmos/cosmos-sdk/x/params" "github.com/cosmos/cosmos-sdk/x/staking/types" ) @@ -18,7 +17,7 @@ type Keeper struct { storeKey sdk.StoreKey storeTKey sdk.StoreKey cdc *codec.Codec - bankKeeper bank.Keeper + bankKeeper types.BankKeeper hooks sdk.StakingHooks paramstore params.Subspace validatorCache map[string]cachedValidator @@ -28,14 +27,14 @@ type Keeper struct { codespace sdk.CodespaceType } -func NewKeeper(cdc *codec.Codec, key, tkey sdk.StoreKey, ck bank.Keeper, +func NewKeeper(cdc *codec.Codec, key, tkey sdk.StoreKey, bk types.BankKeeper, paramstore params.Subspace, codespace sdk.CodespaceType) Keeper { keeper := Keeper{ storeKey: key, storeTKey: tkey, cdc: cdc, - bankKeeper: ck, + bankKeeper: bk, paramstore: paramstore.WithKeyTable(ParamKeyTable()), hooks: nil, validatorCache: make(map[string]cachedValidator, aminoCacheSize), diff --git a/x/staking/keeper/slash.go b/x/staking/keeper/slash.go index 6156fbb4b3..9793883f0c 100644 --- a/x/staking/keeper/slash.go +++ b/x/staking/keeper/slash.go @@ -29,7 +29,7 @@ func (k Keeper) Slash(ctx sdk.Context, consAddr sdk.ConsAddress, infractionHeigh } // Amount of slashing = slash slashFactor * power at time of infraction - amount := types.TokensFromTendermintPower(power) + amount := sdk.TokensFromTendermintPower(power) slashAmountDec := sdk.NewDecFromInt(amount).Mul(slashFactor) slashAmount := slashAmountDec.TruncateInt() diff --git a/x/staking/keeper/slash_test.go b/x/staking/keeper/slash_test.go index 466edba8b8..b2cec2ce82 100644 --- a/x/staking/keeper/slash_test.go +++ b/x/staking/keeper/slash_test.go @@ -21,7 +21,7 @@ func setupHelper(t *testing.T, power int64) (sdk.Context, Keeper, types.Params) params := keeper.GetParams(ctx) pool := keeper.GetPool(ctx) numVals := int64(3) - amt := types.TokensFromTendermintPower(power) + amt := sdk.TokensFromTendermintPower(power) pool.NotBondedTokens = amt.MulRaw(numVals) // add numVals validators @@ -199,7 +199,7 @@ func TestSlashAtNegativeHeight(t *testing.T) { // power decreased require.Equal(t, int64(5), validator.GetTendermintPower()) // pool bonded shares decreased - require.Equal(t, types.TokensFromTendermintPower(5), oldPool.BondedTokens.Sub(newPool.BondedTokens)) + require.Equal(t, sdk.TokensFromTendermintPower(5), oldPool.BondedTokens.Sub(newPool.BondedTokens)) } // tests Slash at the current height @@ -226,7 +226,7 @@ func TestSlashValidatorAtCurrentHeight(t *testing.T) { // power decreased require.Equal(t, int64(5), validator.GetTendermintPower()) // pool bonded shares decreased - require.Equal(t, types.TokensFromTendermintPower(5), oldPool.BondedTokens.Sub(newPool.BondedTokens)) + require.Equal(t, sdk.TokensFromTendermintPower(5), oldPool.BondedTokens.Sub(newPool.BondedTokens)) } // tests Slash at a previous height with an unbonding delegation @@ -237,7 +237,7 @@ func TestSlashWithUnbondingDelegation(t *testing.T) { // set an unbonding delegation with expiration timestamp beyond which the // unbonding delegation shouldn't be slashed - ubdTokens := types.TokensFromTendermintPower(4) + ubdTokens := sdk.TokensFromTendermintPower(4) ubd := types.NewUnbondingDelegation(addrDels[0], addrVals[0], 11, time.Unix(0, 0), ubdTokens) keeper.SetUnbondingDelegation(ctx, ubd) @@ -258,11 +258,11 @@ func TestSlashWithUnbondingDelegation(t *testing.T) { require.True(t, found) require.Len(t, ubd.Entries, 1) // balance decreased - require.Equal(t, types.TokensFromTendermintPower(2), ubd.Entries[0].Balance) + require.Equal(t, sdk.TokensFromTendermintPower(2), ubd.Entries[0].Balance) // read updated pool newPool := keeper.GetPool(ctx) // bonded tokens burned - require.Equal(t, types.TokensFromTendermintPower(3), oldPool.BondedTokens.Sub(newPool.BondedTokens)) + require.Equal(t, sdk.TokensFromTendermintPower(3), oldPool.BondedTokens.Sub(newPool.BondedTokens)) // read updated validator validator, found = keeper.GetValidatorByConsAddr(ctx, consAddr) require.True(t, found) @@ -283,7 +283,7 @@ func TestSlashWithUnbondingDelegation(t *testing.T) { // read updated pool newPool = keeper.GetPool(ctx) // bonded tokens burned again - require.Equal(t, types.TokensFromTendermintPower(6), oldPool.BondedTokens.Sub(newPool.BondedTokens)) + require.Equal(t, sdk.TokensFromTendermintPower(6), oldPool.BondedTokens.Sub(newPool.BondedTokens)) // read updated validator validator, found = keeper.GetValidatorByConsAddr(ctx, consAddr) require.True(t, found) @@ -304,7 +304,7 @@ func TestSlashWithUnbondingDelegation(t *testing.T) { // read updated pool newPool = keeper.GetPool(ctx) // bonded tokens burned again - require.Equal(t, types.TokensFromTendermintPower(9), oldPool.BondedTokens.Sub(newPool.BondedTokens)) + require.Equal(t, sdk.TokensFromTendermintPower(9), oldPool.BondedTokens.Sub(newPool.BondedTokens)) // read updated validator validator, found = keeper.GetValidatorByConsAddr(ctx, consAddr) require.True(t, found) @@ -325,7 +325,7 @@ func TestSlashWithUnbondingDelegation(t *testing.T) { // read updated pool newPool = keeper.GetPool(ctx) // just 1 bonded token burned again since that's all the validator now has - require.Equal(t, types.TokensFromTendermintPower(10), oldPool.BondedTokens.Sub(newPool.BondedTokens)) + require.Equal(t, sdk.TokensFromTendermintPower(10), oldPool.BondedTokens.Sub(newPool.BondedTokens)) // apply TM updates keeper.ApplyAndReturnValidatorSetUpdates(ctx) // read updated validator @@ -342,7 +342,7 @@ func TestSlashWithRedelegation(t *testing.T) { fraction := sdk.NewDecWithPrec(5, 1) // set a redelegation - rdTokens := types.TokensFromTendermintPower(6) + rdTokens := sdk.TokensFromTendermintPower(6) rd := types.NewRedelegation(addrDels[0], addrVals[0], addrVals[1], 11, time.Unix(0, 0), rdTokens, sdk.NewDecFromInt(rdTokens)) keeper.SetRedelegation(ctx, rd) @@ -370,7 +370,7 @@ func TestSlashWithRedelegation(t *testing.T) { // read updated pool newPool := keeper.GetPool(ctx) // bonded tokens burned - require.Equal(t, types.TokensFromTendermintPower(5), oldPool.BondedTokens.Sub(newPool.BondedTokens)) + require.Equal(t, sdk.TokensFromTendermintPower(5), oldPool.BondedTokens.Sub(newPool.BondedTokens)) // read updated validator validator, found = keeper.GetValidatorByConsAddr(ctx, consAddr) require.True(t, found) @@ -393,7 +393,7 @@ func TestSlashWithRedelegation(t *testing.T) { // read updated pool newPool = keeper.GetPool(ctx) // seven bonded tokens burned - require.Equal(t, types.TokensFromTendermintPower(12), oldPool.BondedTokens.Sub(newPool.BondedTokens)) + require.Equal(t, sdk.TokensFromTendermintPower(12), oldPool.BondedTokens.Sub(newPool.BondedTokens)) // read updated validator validator, found = keeper.GetValidatorByConsAddr(ctx, consAddr) require.True(t, found) @@ -413,7 +413,7 @@ func TestSlashWithRedelegation(t *testing.T) { // read updated pool newPool = keeper.GetPool(ctx) // four more bonded tokens burned - require.Equal(t, types.TokensFromTendermintPower(16), oldPool.BondedTokens.Sub(newPool.BondedTokens)) + require.Equal(t, sdk.TokensFromTendermintPower(16), oldPool.BondedTokens.Sub(newPool.BondedTokens)) // apply TM updates keeper.ApplyAndReturnValidatorSetUpdates(ctx) // read updated validator @@ -436,7 +436,7 @@ func TestSlashWithRedelegation(t *testing.T) { // read updated pool newPool = keeper.GetPool(ctx) // no more bonded tokens burned - require.Equal(t, types.TokensFromTendermintPower(16), oldPool.BondedTokens.Sub(newPool.BondedTokens)) + require.Equal(t, sdk.TokensFromTendermintPower(16), oldPool.BondedTokens.Sub(newPool.BondedTokens)) // read updated validator // power still zero, still in unbonding period validator, _ = keeper.GetValidatorByConsAddr(ctx, consAddr) @@ -450,7 +450,7 @@ func TestSlashBoth(t *testing.T) { // set a redelegation with expiration timestamp beyond which the // redelegation shouldn't be slashed - rdATokens := types.TokensFromTendermintPower(6) + rdATokens := sdk.TokensFromTendermintPower(6) rdA := types.NewRedelegation(addrDels[0], addrVals[0], addrVals[1], 11, time.Unix(0, 0), rdATokens, sdk.NewDecFromInt(rdATokens)) @@ -462,7 +462,7 @@ func TestSlashBoth(t *testing.T) { // set an unbonding delegation with expiration timestamp (beyond which the // unbonding delegation shouldn't be slashed) - ubdATokens := types.TokensFromTendermintPower(4) + ubdATokens := sdk.TokensFromTendermintPower(4) ubdA := types.NewUnbondingDelegation(addrDels[0], addrVals[0], 11, time.Unix(0, 0), ubdATokens) keeper.SetUnbondingDelegation(ctx, ubdA) @@ -482,9 +482,9 @@ func TestSlashBoth(t *testing.T) { // read updated pool newPool := keeper.GetPool(ctx) // not-bonded tokens burned - require.Equal(t, types.TokensFromTendermintPower(2), oldPool.NotBondedTokens.Sub(newPool.NotBondedTokens)) + require.Equal(t, sdk.TokensFromTendermintPower(2), oldPool.NotBondedTokens.Sub(newPool.NotBondedTokens)) // bonded tokens burned - require.Equal(t, types.TokensFromTendermintPower(3), oldPool.BondedTokens.Sub(newPool.BondedTokens)) + require.Equal(t, sdk.TokensFromTendermintPower(3), oldPool.BondedTokens.Sub(newPool.BondedTokens)) // read updated validator validator, found = keeper.GetValidatorByConsAddr(ctx, sdk.GetConsAddress(PKs[0])) require.True(t, found) diff --git a/x/staking/keeper/test_common.go b/x/staking/keeper/test_common.go index 83b6eb3ed8..853583acb7 100644 --- a/x/staking/keeper/test_common.go +++ b/x/staking/keeper/test_common.go @@ -78,7 +78,7 @@ func MakeTestCodec() *codec.Codec { // init power is converted to an amount of tokens func CreateTestInput(t *testing.T, isCheckTx bool, initPower int64) (sdk.Context, auth.AccountKeeper, Keeper) { - initCoins := types.TokensFromTendermintPower(initPower) + initCoins := sdk.TokensFromTendermintPower(initPower) keyStaking := sdk.NewKVStoreKey(types.StoreKey) tkeyStaking := sdk.NewTransientStoreKey(types.TStoreKey) diff --git a/x/staking/keeper/validator_test.go b/x/staking/keeper/validator_test.go index 431b423bd5..1528b16811 100644 --- a/x/staking/keeper/validator_test.go +++ b/x/staking/keeper/validator_test.go @@ -22,7 +22,7 @@ func TestSetValidator(t *testing.T) { valPubKey := PKs[0] valAddr := sdk.ValAddress(valPubKey.Address().Bytes()) - valTokens := types.TokensFromTendermintPower(10) + valTokens := sdk.TokensFromTendermintPower(10) // test how the validator is set from a purely unbonbed pool validator := types.NewValidator(valAddr, valPubKey, types.Description{}) @@ -124,15 +124,15 @@ func TestUpdateBondedValidatorsDecreaseCliff(t *testing.T) { keeper.SetParams(ctx, params) // create a random pool - pool.NotBondedTokens = types.TokensFromTendermintPower(10000) - pool.BondedTokens = types.TokensFromTendermintPower(1234) + pool.NotBondedTokens = sdk.TokensFromTendermintPower(10000) + pool.BondedTokens = sdk.TokensFromTendermintPower(1234) keeper.SetPool(ctx, pool) validators := make([]types.Validator, numVals) for i := 0; i < len(validators); i++ { moniker := fmt.Sprintf("val#%d", int64(i)) val := types.NewValidator(sdk.ValAddress(Addrs[i]), PKs[i], types.Description{Moniker: moniker}) - delTokens := types.TokensFromTendermintPower(int64((i + 1) * 10)) + delTokens := sdk.TokensFromTendermintPower(int64((i + 1) * 10)) val, pool, _ = val.AddTokensFromDel(pool, delTokens) keeper.SetPool(ctx, pool) @@ -145,7 +145,7 @@ func TestUpdateBondedValidatorsDecreaseCliff(t *testing.T) { // remove enough tokens to kick out the validator below the current cliff // validator and next in line cliff validator keeper.DeleteValidatorByPowerIndex(ctx, nextCliffVal) - shares := types.TokensFromTendermintPower(21) + shares := sdk.TokensFromTendermintPower(21) nextCliffVal, pool, _ = nextCliffVal.RemoveDelShares(pool, sdk.NewDecFromInt(shares)) keeper.SetPool(ctx, pool) nextCliffVal = TestingUpdateValidator(keeper, ctx, nextCliffVal, true) @@ -175,7 +175,7 @@ func TestSlashToZeroPowerRemoved(t *testing.T) { // add a validator validator := types.NewValidator(addrVals[0], PKs[0], types.Description{}) - valTokens := types.TokensFromTendermintPower(100) + valTokens := sdk.TokensFromTendermintPower(100) validator, pool, _ = validator.AddTokensFromDel(pool, valTokens) require.Equal(t, sdk.Unbonded, validator.Status) require.Equal(t, valTokens, validator.Tokens) @@ -206,13 +206,13 @@ func TestValidatorBasics(t *testing.T) { validators[i] = types.NewValidator(addrVals[i], PKs[i], types.Description{}) validators[i].Status = sdk.Unbonded validators[i].Tokens = sdk.ZeroInt() - tokens := types.TokensFromTendermintPower(power) + tokens := sdk.TokensFromTendermintPower(power) validators[i], pool, _ = validators[i].AddTokensFromDel(pool, tokens) keeper.SetPool(ctx, pool) } - assert.Equal(t, types.TokensFromTendermintPower(9), validators[0].Tokens) - assert.Equal(t, types.TokensFromTendermintPower(8), validators[1].Tokens) - assert.Equal(t, types.TokensFromTendermintPower(7), validators[2].Tokens) + assert.Equal(t, sdk.TokensFromTendermintPower(9), validators[0].Tokens) + assert.Equal(t, sdk.TokensFromTendermintPower(8), validators[1].Tokens) + assert.Equal(t, sdk.TokensFromTendermintPower(7), validators[2].Tokens) // check the empty keeper first _, found := keeper.GetValidator(ctx, addrVals[0]) @@ -245,14 +245,14 @@ func TestValidatorBasics(t *testing.T) { require.Equal(t, 1, len(resVals)) assert.True(ValEq(t, validators[0], resVals[0])) assert.Equal(t, sdk.Bonded, validators[0].Status) - assert.True(sdk.IntEq(t, types.TokensFromTendermintPower(9), validators[0].BondedTokens())) + assert.True(sdk.IntEq(t, sdk.TokensFromTendermintPower(9), validators[0].BondedTokens())) pool = keeper.GetPool(ctx) assert.True(sdk.IntEq(t, pool.BondedTokens, validators[0].BondedTokens())) // modify a records, save, and retrieve validators[0].Status = sdk.Bonded - validators[0].Tokens = types.TokensFromTendermintPower(10) + validators[0].Tokens = sdk.TokensFromTendermintPower(10) validators[0].DelegatorShares = sdk.NewDecFromInt(validators[0].Tokens) validators[0] = TestingUpdateValidator(keeper, ctx, validators[0], true) resVal, found = keeper.GetValidator(ctx, addrVals[0]) @@ -458,7 +458,7 @@ func TestGetValidatorsEdgeCases(t *testing.T) { pool := keeper.GetPool(ctx) moniker := fmt.Sprintf("val#%d", int64(i)) validators[i] = types.NewValidator(sdk.ValAddress(Addrs[i]), PKs[i], types.Description{Moniker: moniker}) - tokens := types.TokensFromTendermintPower(power) + tokens := sdk.TokensFromTendermintPower(power) validators[i], pool, _ = validators[i].AddTokensFromDel(pool, tokens) keeper.SetPool(ctx, pool) validators[i] = TestingUpdateValidator(keeper, ctx, validators[i], true) @@ -475,7 +475,7 @@ func TestGetValidatorsEdgeCases(t *testing.T) { pool := keeper.GetPool(ctx) keeper.DeleteValidatorByPowerIndex(ctx, validators[0]) - delTokens := types.TokensFromTendermintPower(500) + delTokens := sdk.TokensFromTendermintPower(500) validators[0], pool, _ = validators[0].AddTokensFromDel(pool, delTokens) keeper.SetPool(ctx, pool) validators[0] = TestingUpdateValidator(keeper, ctx, validators[0], true) @@ -540,9 +540,9 @@ func TestValidatorBondHeight(t *testing.T) { validators[1] = types.NewValidator(sdk.ValAddress(Addrs[1]), PKs[1], types.Description{}) validators[2] = types.NewValidator(sdk.ValAddress(Addrs[2]), PKs[2], types.Description{}) - tokens0 := types.TokensFromTendermintPower(200) - tokens1 := types.TokensFromTendermintPower(100) - tokens2 := types.TokensFromTendermintPower(100) + tokens0 := sdk.TokensFromTendermintPower(200) + tokens1 := sdk.TokensFromTendermintPower(100) + tokens2 := sdk.TokensFromTendermintPower(100) validators[0], pool, _ = validators[0].AddTokensFromDel(pool, tokens0) validators[1], pool, _ = validators[1].AddTokensFromDel(pool, tokens1) validators[2], pool, _ = validators[2].AddTokensFromDel(pool, tokens2) @@ -565,7 +565,7 @@ func TestValidatorBondHeight(t *testing.T) { assert.True(ValEq(t, validators[1], resValidators[1])) keeper.DeleteValidatorByPowerIndex(ctx, validators[1]) keeper.DeleteValidatorByPowerIndex(ctx, validators[2]) - delTokens := types.TokensFromTendermintPower(50) + delTokens := sdk.TokensFromTendermintPower(50) validators[1], pool, _ = validators[1].AddTokensFromDel(pool, delTokens) validators[2], pool, _ = validators[2].AddTokensFromDel(pool, delTokens) keeper.SetPool(ctx, pool) @@ -590,7 +590,7 @@ func TestFullValidatorSetPowerChange(t *testing.T) { for i, power := range powers { pool := keeper.GetPool(ctx) validators[i] = types.NewValidator(sdk.ValAddress(Addrs[i]), PKs[i], types.Description{}) - tokens := types.TokensFromTendermintPower(power) + tokens := sdk.TokensFromTendermintPower(power) validators[i], pool, _ = validators[i].AddTokensFromDel(pool, tokens) keeper.SetPool(ctx, pool) TestingUpdateValidator(keeper, ctx, validators[i], true) @@ -612,7 +612,7 @@ func TestFullValidatorSetPowerChange(t *testing.T) { // test a swap in voting power pool := keeper.GetPool(ctx) - tokens := types.TokensFromTendermintPower(600) + tokens := sdk.TokensFromTendermintPower(600) validators[0], pool, _ = validators[0].AddTokensFromDel(pool, tokens) keeper.SetPool(ctx, pool) validators[0] = TestingUpdateValidator(keeper, ctx, validators[0], true) @@ -634,7 +634,7 @@ func TestApplyAndReturnValidatorSetUpdatesAllNone(t *testing.T) { valAddr := sdk.ValAddress(valPubKey.Address().Bytes()) validators[i] = types.NewValidator(valAddr, valPubKey, types.Description{}) - tokens := types.TokensFromTendermintPower(power) + tokens := sdk.TokensFromTendermintPower(power) validators[i], pool, _ = validators[i].AddTokensFromDel(pool, tokens) keeper.SetPool(ctx, pool) } @@ -664,7 +664,7 @@ func TestApplyAndReturnValidatorSetUpdatesIdentical(t *testing.T) { pool := keeper.GetPool(ctx) validators[i] = types.NewValidator(sdk.ValAddress(Addrs[i]), PKs[i], types.Description{}) - tokens := types.TokensFromTendermintPower(power) + tokens := sdk.TokensFromTendermintPower(power) validators[i], pool, _ = validators[i].AddTokensFromDel(pool, tokens) keeper.SetPool(ctx, pool) } @@ -688,7 +688,7 @@ func TestApplyAndReturnValidatorSetUpdatesSingleValueChange(t *testing.T) { pool := keeper.GetPool(ctx) validators[i] = types.NewValidator(sdk.ValAddress(Addrs[i]), PKs[i], types.Description{}) - tokens := types.TokensFromTendermintPower(power) + tokens := sdk.TokensFromTendermintPower(power) validators[i], pool, _ = validators[i].AddTokensFromDel(pool, tokens) keeper.SetPool(ctx, pool) } @@ -699,7 +699,7 @@ func TestApplyAndReturnValidatorSetUpdatesSingleValueChange(t *testing.T) { // test single value change // tendermintUpdate set: {} -> {c1'} validators[0].Status = sdk.Bonded - validators[0].Tokens = types.TokensFromTendermintPower(600) + validators[0].Tokens = sdk.TokensFromTendermintPower(600) validators[0] = TestingUpdateValidator(keeper, ctx, validators[0], false) updates := keeper.ApplyAndReturnValidatorSetUpdates(ctx) @@ -717,7 +717,7 @@ func TestApplyAndReturnValidatorSetUpdatesMultipleValueChange(t *testing.T) { pool := keeper.GetPool(ctx) validators[i] = types.NewValidator(sdk.ValAddress(Addrs[i]), PKs[i], types.Description{}) - tokens := types.TokensFromTendermintPower(power) + tokens := sdk.TokensFromTendermintPower(power) validators[i], pool, _ = validators[i].AddTokensFromDel(pool, tokens) keeper.SetPool(ctx, pool) } @@ -728,8 +728,8 @@ func TestApplyAndReturnValidatorSetUpdatesMultipleValueChange(t *testing.T) { // test multiple value change // tendermintUpdate set: {c1, c3} -> {c1', c3'} pool := keeper.GetPool(ctx) - delTokens1 := types.TokensFromTendermintPower(190) - delTokens2 := types.TokensFromTendermintPower(80) + delTokens1 := sdk.TokensFromTendermintPower(190) + delTokens2 := sdk.TokensFromTendermintPower(80) validators[0], pool, _ = validators[0].AddTokensFromDel(pool, delTokens1) validators[1], pool, _ = validators[1].AddTokensFromDel(pool, delTokens2) keeper.SetPool(ctx, pool) @@ -751,7 +751,7 @@ func TestApplyAndReturnValidatorSetUpdatesInserted(t *testing.T) { pool := keeper.GetPool(ctx) validators[i] = types.NewValidator(sdk.ValAddress(Addrs[i]), PKs[i], types.Description{}) - tokens := types.TokensFromTendermintPower(power) + tokens := sdk.TokensFromTendermintPower(power) validators[i], pool, _ = validators[i].AddTokensFromDel(pool, tokens) keeper.SetPool(ctx, pool) } @@ -800,7 +800,7 @@ func TestApplyAndReturnValidatorSetUpdatesWithCliffValidator(t *testing.T) { pool := keeper.GetPool(ctx) validators[i] = types.NewValidator(sdk.ValAddress(Addrs[i]), PKs[i], types.Description{}) - tokens := types.TokensFromTendermintPower(power) + tokens := sdk.TokensFromTendermintPower(power) validators[i], pool, _ = validators[i].AddTokensFromDel(pool, tokens) keeper.SetPool(ctx, pool) } @@ -819,7 +819,7 @@ func TestApplyAndReturnValidatorSetUpdatesWithCliffValidator(t *testing.T) { require.Equal(t, 0, len(keeper.ApplyAndReturnValidatorSetUpdates(ctx))) pool := keeper.GetPool(ctx) - tokens := types.TokensFromTendermintPower(10) + tokens := sdk.TokensFromTendermintPower(10) validators[2], pool, _ = validators[2].AddTokensFromDel(pool, tokens) keeper.SetPool(ctx, pool) keeper.SetValidator(ctx, validators[2]) @@ -840,7 +840,7 @@ func TestApplyAndReturnValidatorSetUpdatesPowerDecrease(t *testing.T) { pool := keeper.GetPool(ctx) validators[i] = types.NewValidator(sdk.ValAddress(Addrs[i]), PKs[i], types.Description{}) - tokens := types.TokensFromTendermintPower(power) + tokens := sdk.TokensFromTendermintPower(power) validators[i], pool, _ = validators[i].AddTokensFromDel(pool, tokens) keeper.SetPool(ctx, pool) } @@ -855,8 +855,8 @@ func TestApplyAndReturnValidatorSetUpdatesPowerDecrease(t *testing.T) { // test multiple value change // tendermintUpdate set: {c1, c3} -> {c1', c3'} pool := keeper.GetPool(ctx) - delTokens1 := types.TokensFromTendermintPower(20) - delTokens2 := types.TokensFromTendermintPower(30) + delTokens1 := sdk.TokensFromTendermintPower(20) + delTokens2 := sdk.TokensFromTendermintPower(30) validators[0], pool, _ = validators[0].RemoveDelShares(pool, sdk.NewDecFromInt(delTokens1)) validators[1], pool, _ = validators[1].RemoveDelShares(pool, sdk.NewDecFromInt(delTokens2)) keeper.SetPool(ctx, pool) @@ -891,7 +891,7 @@ func TestApplyAndReturnValidatorSetUpdatesNewValidator(t *testing.T) { valAddr := sdk.ValAddress(valPubKey.Address().Bytes()) validators[i] = types.NewValidator(valAddr, valPubKey, types.Description{}) - tokens := types.TokensFromTendermintPower(power) + tokens := sdk.TokensFromTendermintPower(power) validators[i], pool, _ = validators[i].AddTokensFromDel(pool, tokens) keeper.SetPool(ctx, pool) @@ -913,7 +913,7 @@ func TestApplyAndReturnValidatorSetUpdatesNewValidator(t *testing.T) { for i, power := range powers { pool := keeper.GetPool(ctx) keeper.DeleteValidatorByPowerIndex(ctx, validators[i]) - tokens := types.TokensFromTendermintPower(power) + tokens := sdk.TokensFromTendermintPower(power) validators[i], pool, _ = validators[i].AddTokensFromDel(pool, tokens) keeper.SetPool(ctx, pool) @@ -943,7 +943,7 @@ func TestApplyAndReturnValidatorSetUpdatesNewValidator(t *testing.T) { valAddr = sdk.ValAddress(valPubKey.Address().Bytes()) validator = types.NewValidator(valAddr, valPubKey, types.Description{}) - tokens := types.TokensFromTendermintPower(500) + tokens := sdk.TokensFromTendermintPower(500) validator, pool, _ = validator.AddTokensFromDel(pool, tokens) keeper.SetValidator(ctx, validator) keeper.SetValidatorByPowerIndex(ctx, validator) @@ -978,7 +978,7 @@ func TestApplyAndReturnValidatorSetUpdatesBondTransition(t *testing.T) { valAddr := sdk.ValAddress(valPubKey.Address().Bytes()) validators[i] = types.NewValidator(valAddr, valPubKey, types.Description{Moniker: moniker}) - tokens := types.TokensFromTendermintPower(power) + tokens := sdk.TokensFromTendermintPower(power) validators[i], pool, _ = validators[i].AddTokensFromDel(pool, tokens) keeper.SetPool(ctx, pool) keeper.SetValidator(ctx, validators[i]) @@ -1004,7 +1004,7 @@ func TestApplyAndReturnValidatorSetUpdatesBondTransition(t *testing.T) { require.True(t, found) keeper.DeleteValidatorByPowerIndex(ctx, validators[0]) - tokens := types.TokensFromTendermintPower(1) + tokens := sdk.TokensFromTendermintPower(1) validators[0], pool, _ = validators[0].AddTokensFromDel(pool, tokens) keeper.SetPool(ctx, pool) keeper.SetValidator(ctx, validators[0]) @@ -1030,7 +1030,7 @@ func TestApplyAndReturnValidatorSetUpdatesBondTransition(t *testing.T) { require.Equal(t, 0, len(updates)) keeper.DeleteValidatorByPowerIndex(ctx, validators[1]) - tokens = types.TokensFromTendermintPower(250) + tokens = sdk.TokensFromTendermintPower(250) validators[1], pool, _ = validators[1].AddTokensFromDel(pool, tokens) keeper.SetPool(ctx, pool) keeper.SetValidator(ctx, validators[1]) diff --git a/x/staking/querier/querier_test.go b/x/staking/querier/querier_test.go index 5367f17c87..a2817335c0 100644 --- a/x/staking/querier/querier_test.go +++ b/x/staking/querier/querier_test.go @@ -177,7 +177,7 @@ func TestQueryDelegation(t *testing.T) { keeper.SetValidator(ctx, val2) keeper.SetValidatorByPowerIndex(ctx, val2) - delTokens := types.TokensFromTendermintPower(20) + delTokens := sdk.TokensFromTendermintPower(20) keeper.Delegate(ctx, addrAcc2, delTokens, val1, true) // apply TM updates @@ -297,7 +297,7 @@ func TestQueryDelegation(t *testing.T) { require.Equal(t, delegationsRes[0], delegation) // Query unbonging delegation - unbondingTokens := types.TokensFromTendermintPower(10) + unbondingTokens := sdk.TokensFromTendermintPower(10) _, err = keeper.Undelegate(ctx, addrAcc2, val1.OperatorAddr, sdk.NewDecFromInt(unbondingTokens)) require.Nil(t, err) @@ -350,7 +350,7 @@ func TestQueryDelegation(t *testing.T) { require.NotNil(t, err) // Query redelegation - redelegationTokens := types.TokensFromTendermintPower(10) + redelegationTokens := sdk.TokensFromTendermintPower(10) _, err = keeper.BeginRedelegation(ctx, addrAcc2, val1.OperatorAddr, val2.OperatorAddr, sdk.NewDecFromInt(redelegationTokens)) require.Nil(t, err) @@ -385,11 +385,11 @@ func TestQueryRedelegations(t *testing.T) { keeper.SetValidator(ctx, val1) keeper.SetValidator(ctx, val2) - delAmount := types.TokensFromTendermintPower(100) + delAmount := sdk.TokensFromTendermintPower(100) keeper.Delegate(ctx, addrAcc2, delAmount, val1, true) _ = keeper.ApplyAndReturnValidatorSetUpdates(ctx) - rdAmount := types.TokensFromTendermintPower(20) + rdAmount := sdk.TokensFromTendermintPower(20) keeper.BeginRedelegation(ctx, addrAcc2, val1.GetOperator(), val2.GetOperator(), sdk.NewDecFromInt(rdAmount)) keeper.ApplyAndReturnValidatorSetUpdates(ctx) diff --git a/x/staking/simulation/invariants.go b/x/staking/simulation/invariants.go index 1f17b4a127..1368a61dca 100644 --- a/x/staking/simulation/invariants.go +++ b/x/staking/simulation/invariants.go @@ -6,21 +6,18 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/auth" - "github.com/cosmos/cosmos-sdk/x/bank" - "github.com/cosmos/cosmos-sdk/x/distribution" - "github.com/cosmos/cosmos-sdk/x/mock/simulation" "github.com/cosmos/cosmos-sdk/x/staking" "github.com/cosmos/cosmos-sdk/x/staking/keeper" ) // AllInvariants runs all invariants of the staking module. // Currently: total supply, positive power -func AllInvariants(ck bank.Keeper, k staking.Keeper, - f auth.FeeCollectionKeeper, d distribution.Keeper, - am auth.AccountKeeper) simulation.Invariant { +func AllInvariants(k staking.Keeper, + f staking.FeeCollectionKeeper, d staking.DistributionKeeper, + am auth.AccountKeeper) sdk.Invariant { return func(ctx sdk.Context) error { - err := SupplyInvariants(ck, k, f, d, am)(ctx) + err := SupplyInvariants(k, f, d, am)(ctx) if err != nil { return err } @@ -46,8 +43,8 @@ func AllInvariants(ck bank.Keeper, k staking.Keeper, // SupplyInvariants checks that the total supply reflects all held not-bonded tokens, bonded tokens, and unbonding delegations // nolint: unparam -func SupplyInvariants(ck bank.Keeper, k staking.Keeper, - f auth.FeeCollectionKeeper, d distribution.Keeper, am auth.AccountKeeper) simulation.Invariant { +func SupplyInvariants(k staking.Keeper, + f staking.FeeCollectionKeeper, d staking.DistributionKeeper, am auth.AccountKeeper) sdk.Invariant { return func(ctx sdk.Context) error { pool := k.GetPool(ctx) @@ -73,16 +70,14 @@ func SupplyInvariants(ck bank.Keeper, k staking.Keeper, return false }) - feePool := d.GetFeePool(ctx) - // add outstanding fees loose = loose.Add(sdk.NewDecFromInt(f.GetCollectedFees(ctx).AmountOf(k.BondDenom(ctx)))) // add community pool - loose = loose.Add(feePool.CommunityPool.AmountOf(k.BondDenom(ctx))) + loose = loose.Add(d.GetFeePoolCommunityCoins(ctx).AmountOf(k.BondDenom(ctx))) // add yet-to-be-withdrawn - loose = loose.Add(d.GetOutstandingRewards(ctx).AmountOf(k.BondDenom(ctx))) + loose = loose.Add(d.GetOutstandingRewardsCoins(ctx).AmountOf(k.BondDenom(ctx))) // Not-bonded tokens should equal coin supply plus unbonding delegations // plus tokens on unbonded validators @@ -104,7 +99,7 @@ func SupplyInvariants(ck bank.Keeper, k staking.Keeper, } // NonNegativePowerInvariant checks that all stored validators have >= 0 power. -func NonNegativePowerInvariant(k staking.Keeper) simulation.Invariant { +func NonNegativePowerInvariant(k staking.Keeper) sdk.Invariant { return func(ctx sdk.Context) error { iterator := k.ValidatorsPowerStoreIterator(ctx) @@ -132,7 +127,7 @@ func NonNegativePowerInvariant(k staking.Keeper) simulation.Invariant { } // PositiveDelegationInvariant checks that all stored delegations have > 0 shares. -func PositiveDelegationInvariant(k staking.Keeper) simulation.Invariant { +func PositiveDelegationInvariant(k staking.Keeper) sdk.Invariant { return func(ctx sdk.Context) error { delegations := k.GetAllDelegations(ctx) for _, delegation := range delegations { @@ -151,7 +146,7 @@ func PositiveDelegationInvariant(k staking.Keeper) simulation.Invariant { // DelegatorSharesInvariant checks whether all the delegator shares which persist // in the delegator object add up to the correct total delegator shares // amount stored in each validator -func DelegatorSharesInvariant(k staking.Keeper) simulation.Invariant { +func DelegatorSharesInvariant(k staking.Keeper) sdk.Invariant { return func(ctx sdk.Context) error { validators := k.GetAllValidators(ctx) for _, validator := range validators { diff --git a/x/staking/test_common.go b/x/staking/test_common.go index aeb9ce626f..2ddc534473 100644 --- a/x/staking/test_common.go +++ b/x/staking/test_common.go @@ -28,7 +28,7 @@ var ( func NewTestMsgCreateValidator(address sdk.ValAddress, pubKey crypto.PubKey, amt sdk.Int) MsgCreateValidator { return types.NewMsgCreateValidator( - address, pubKey, sdk.NewCoin(types.DefaultBondDenom, amt), Description{}, commissionMsg, sdk.OneInt(), + address, pubKey, sdk.NewCoin(sdk.DefaultBondDenom, amt), Description{}, commissionMsg, sdk.OneInt(), ) } @@ -38,7 +38,7 @@ func NewTestMsgCreateValidatorWithCommission(address sdk.ValAddress, pubKey cryp commission := NewCommissionMsg(commissionRate, sdk.OneDec(), sdk.ZeroDec()) return types.NewMsgCreateValidator( - address, pubKey, sdk.NewCoin(types.DefaultBondDenom, amt), Description{}, commission, sdk.OneInt(), + address, pubKey, sdk.NewCoin(sdk.DefaultBondDenom, amt), Description{}, commission, sdk.OneInt(), ) } @@ -46,18 +46,18 @@ func NewTestMsgCreateValidatorWithMinSelfDelegation(address sdk.ValAddress, pubK amt sdk.Int, minSelfDelegation sdk.Int) MsgCreateValidator { return types.NewMsgCreateValidator( - address, pubKey, sdk.NewCoin(types.DefaultBondDenom, amt), Description{}, commissionMsg, minSelfDelegation, + address, pubKey, sdk.NewCoin(sdk.DefaultBondDenom, amt), Description{}, commissionMsg, minSelfDelegation, ) } func NewTestMsgDelegate(delAddr sdk.AccAddress, valAddr sdk.ValAddress, amt sdk.Int) MsgDelegate { - amount := sdk.NewCoin(types.DefaultBondDenom, amt) + amount := sdk.NewCoin(sdk.DefaultBondDenom, amt) return NewMsgDelegate(delAddr, valAddr, amount) } func NewTestMsgCreateValidatorOnBehalfOf(delAddr sdk.AccAddress, valAddr sdk.ValAddress, valPubKey crypto.PubKey, amt sdk.Int) MsgCreateValidator { - amount := sdk.NewCoin(types.DefaultBondDenom, amt) + amount := sdk.NewCoin(sdk.DefaultBondDenom, amt) return NewMsgCreateValidatorOnBehalfOf(delAddr, valAddr, valPubKey, amount, Description{}, commissionMsg, sdk.OneInt()) } diff --git a/x/staking/types/expected_keepers.go b/x/staking/types/expected_keepers.go new file mode 100644 index 0000000000..affa220707 --- /dev/null +++ b/x/staking/types/expected_keepers.go @@ -0,0 +1,20 @@ +package types + +import sdk "github.com/cosmos/cosmos-sdk/types" + +// expected coin keeper +type DistributionKeeper interface { + GetFeePoolCommunityCoins(ctx sdk.Context) sdk.DecCoins + GetOutstandingRewardsCoins(ctx sdk.Context) sdk.DecCoins +} + +// expected fee collection keeper +type FeeCollectionKeeper interface { + GetCollectedFees(ctx sdk.Context) sdk.Coins +} + +// expected bank keeper +type BankKeeper interface { + DelegateCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) (sdk.Tags, sdk.Error) + UndelegateCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) (sdk.Tags, sdk.Error) +} diff --git a/x/staking/types/genesis.go b/x/staking/types/genesis.go index fdc9b9677b..e7c148346f 100644 --- a/x/staking/types/genesis.go +++ b/x/staking/types/genesis.go @@ -10,8 +10,8 @@ type GenesisState struct { Params Params `json:"params"` LastTotalPower sdk.Int `json:"last_total_power"` LastValidatorPowers []LastValidatorPower `json:"last_validator_powers"` - Validators []Validator `json:"validators"` - Bonds []Delegation `json:"bonds"` + Validators Validators `json:"validators"` + Delegations Delegations `json:"delegations"` UnbondingDelegations []UnbondingDelegation `json:"unbonding_delegations"` Redelegations []Redelegation `json:"redelegations"` Exported bool `json:"exported"` @@ -23,12 +23,12 @@ type LastValidatorPower struct { Power int64 } -func NewGenesisState(pool Pool, params Params, validators []Validator, bonds []Delegation) GenesisState { +func NewGenesisState(pool Pool, params Params, validators []Validator, delegations []Delegation) GenesisState { return GenesisState{ - Pool: pool, - Params: params, - Validators: validators, - Bonds: bonds, + Pool: pool, + Params: params, + Validators: validators, + Delegations: delegations, } } diff --git a/x/staking/types/msg_test.go b/x/staking/types/msg_test.go index ce3e6383bd..1e124e20ed 100644 --- a/x/staking/types/msg_test.go +++ b/x/staking/types/msg_test.go @@ -11,8 +11,8 @@ import ( ) var ( - coinPos = sdk.NewInt64Coin(DefaultBondDenom, 1000) - coinZero = sdk.NewInt64Coin(DefaultBondDenom, 0) + coinPos = sdk.NewInt64Coin(sdk.DefaultBondDenom, 1000) + coinZero = sdk.NewInt64Coin(sdk.DefaultBondDenom, 0) ) // test ValidateBasic for MsgCreateValidator diff --git a/x/staking/types/params.go b/x/staking/types/params.go index 759efab52c..3239bdc25d 100644 --- a/x/staking/types/params.go +++ b/x/staking/types/params.go @@ -6,6 +6,7 @@ import ( "time" "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/params" ) @@ -20,16 +21,6 @@ const ( // Default maximum entries in a UBD/RED pair DefaultMaxEntries uint16 = 7 - - // Delay, in blocks, between when validator updates are returned to Tendermint and when they are applied - // For example, if this is 0, the validator set at the end of a block will sign the next block, or - // if this is 1, the validator set at the end of a block will sign the block after the next. - // Constant as this should not change without a hard fork. - // TODO: Link to some Tendermint docs, this is very unobvious. - ValidatorUpdateDelay int64 = 1 - - // Default bondable coin denomination - DefaultBondDenom = "stake" ) // nolint - Keys for parameter access @@ -82,7 +73,7 @@ func (p Params) Equal(p2 Params) bool { // DefaultParams returns a default set of parameters. func DefaultParams() Params { - return NewParams(DefaultUnbondingTime, DefaultMaxValidators, DefaultMaxEntries, DefaultBondDenom) + return NewParams(DefaultUnbondingTime, DefaultMaxValidators, DefaultMaxEntries, sdk.DefaultBondDenom) } // String returns a human readable string representation of the parameters. diff --git a/x/staking/types/validator.go b/x/staking/types/validator.go index 37e32b5d9b..7d1f6fa80b 100644 --- a/x/staking/types/validator.go +++ b/x/staking/types/validator.go @@ -3,7 +3,6 @@ package types import ( "bytes" "fmt" - "math/big" "strings" "time" @@ -55,6 +54,14 @@ func (v Validators) String() (out string) { return strings.TrimSpace(out) } +// ToSDKValidators - convenience function convert []Validators to []sdk.Validators +func (v Validators) ToSDKValidators() (validators []sdk.Validator) { + for _, val := range v { + validators = append(validators, val) + } + return validators +} + // NewValidator - initialize a new validator func NewValidator(operator sdk.ValAddress, pubKey crypto.PubKey, description Description) Validator { return Validator{ @@ -417,23 +424,9 @@ func (v Validator) TendermintPower() int64 { return 0 } -var powerReduction = sdk.NewIntFromBigInt(new(big.Int).Exp(big.NewInt(10), big.NewInt(6), nil)) - // potential Tendermint power func (v Validator) PotentialTendermintPower() int64 { - return (v.Tokens.Div(powerReduction)).Int64() -} - -// utility functions - -// TokensToTendermintPower - convert input tokens to potential tendermint power -func TokensToTendermintPower(tokens sdk.Int) int64 { - return (tokens.Div(powerReduction)).Int64() -} - -// TokensFromTendermintPower - convert input power to tokens -func TokensFromTendermintPower(power int64) sdk.Int { - return sdk.NewInt(power).Mul(powerReduction) + return sdk.TokensToTendermintPower(v.Tokens) } // ensure fulfills the sdk validator types From afd90f88c15af6112e93548e8ba6678e3d7a29ee Mon Sep 17 00:00:00 2001 From: Aleksandr Bezobchuk <alex@tendermint.com> Date: Thu, 14 Feb 2019 10:02:46 -0500 Subject: [PATCH 12/20] add JSON struct tags to vesting accounts --- PENDING.md | 1 + x/auth/account.go | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/PENDING.md b/PENDING.md index 3c563a90b5..a559992b48 100644 --- a/PENDING.md +++ b/PENDING.md @@ -42,6 +42,7 @@ IMPROVEMENTS JSON ABCI log. * [\#3620](https://github.com/cosmos/cosmos-sdk/pull/3620) Version command shows build tags * [\#3638] Add Bcrypt benchmarks & justification of security parameter choice + * [\#3648] Add JSON struct tags to vesting accounts. * Tendermint * [\#3618] Upgrade to Tendermint 0.30.03 diff --git a/x/auth/account.go b/x/auth/account.go index 5c60c59a8d..bc5c75da64 100644 --- a/x/auth/account.go +++ b/x/auth/account.go @@ -183,11 +183,11 @@ func (acc *BaseAccount) SpendableCoins(_ time.Time) sdk.Coins { type BaseVestingAccount struct { *BaseAccount - OriginalVesting sdk.Coins // coins in account upon initialization - DelegatedFree sdk.Coins // coins that are vested and delegated - DelegatedVesting sdk.Coins // coins that vesting and delegated + OriginalVesting sdk.Coins `json:"original_vesting"` // coins in account upon initialization + DelegatedFree sdk.Coins `json:"delegated_free"` // coins that are vested and delegated + DelegatedVesting sdk.Coins `json:"delegated_vesting"` // coins that vesting and delegated - EndTime int64 // when the coins become unlocked + EndTime int64 `json:"end_time"` // when the coins become unlocked } // String implements fmt.Stringer @@ -343,7 +343,7 @@ var _ VestingAccount = (*ContinuousVestingAccount)(nil) type ContinuousVestingAccount struct { *BaseVestingAccount - StartTime int64 // when the coins start to vest + StartTime int64 `json:"start_time"` // when the coins start to vest } // NewContinuousVestingAccount returns a new ContinuousVestingAccount From fb2d902c43a9154bb81285881571b2e34736e308 Mon Sep 17 00:00:00 2001 From: gamarin2 <gautier@tendermint.com> Date: Thu, 14 Feb 2019 16:50:39 +0100 Subject: [PATCH 13/20] Merge PR #3649: improve ledger docs --- docs/gaia/delegator-guide-cli.md | 8 ++- docs/gaia/ledger.md | 83 +++++++++++++++++++++++++------- 2 files changed, 71 insertions(+), 20 deletions(-) diff --git a/docs/gaia/delegator-guide-cli.md b/docs/gaia/delegator-guide-cli.md index c790d9741a..43d7ed86ca 100644 --- a/docs/gaia/delegator-guide-cli.md +++ b/docs/gaia/delegator-guide-cli.md @@ -178,6 +178,10 @@ Then, to create an account, use the following command: gaiacli keys add <yourAccountName> --ledger ``` +::: warning +**This command will only work while the Ledger is plugged in and unlocked** +::: + - `<yourKeyName>` is the name of the account. It is a reference to the account number used to derive the key pair from the mnemonic. You will use this name to identify your account when you want to send a transaction. - You can add the optional `--account` flag to specify the path (`0`, `1`, `2`, ...) you want to use to generate your account. By default, account `0` is generated. @@ -380,8 +384,8 @@ gaiacli tx distr withdraw-all-rewards --from <delegatorKeyName> --gas auto --gas gaiacli tx staking unbond <validatorAddress> <amountToUnbond> --from <delegatorKeyName> --gas auto --gas-prices <gasPrice> ``` -::: tip -If you use a connected Ledger, you will be asked to confirm the transaction on the device before it is signed and broadcast to the network +::: warning +**If you use a connected Ledger, you will be asked to confirm the transaction on the device before it is signed and broadcast to the network. Note that the command will only work while the Ledger is plugged in and unlocked.** ::: To confirm that your transaction went through, you can use the following queries: diff --git a/docs/gaia/ledger.md b/docs/gaia/ledger.md index 6dd4412618..3a36bad87f 100644 --- a/docs/gaia/ledger.md +++ b/docs/gaia/ledger.md @@ -1,29 +1,76 @@ # Ledger Nano Support -### Ledger Support for account keys +## A note on HD wallet -`gaiacli` now supports derivation of account keys from a Ledger seed. To use this functionality you will need the following: +HD Wallets, originally specified in Bitcoin's [BIP32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki), are a special kind of wallet that let users derive any number of accounts from a single seed. To understand what that means, let us first define some terminology: -- A running `gaiad` instance connected to the network you wish to use. -- A `gaiacli` instance configured to connect to your chosen `gaiad` instance. -- A LedgerNano with the `ledger-cosmos` app installed - * Install the Cosmos app onto your Ledger by following the instructions in the [`ledger-cosmos`](https://github.com/cosmos/ledger-cosmos/blob/master/docs/BUILD.md) repository. - * A production-ready version of this app will soon be included in the [Ledger Apps Store](https://www.ledgerwallet.com/apps) +- **Wallet**: Set of accounts obtained from a given seed. +- **Account**: A pair of public key/private key. +- **Private Key**: A private key is a secret piece of information used to sign messages. In the blockchain context, a private key identifies the owner of an account. The private key of a user should never be revealed to others. +- **Public Key**: A public key is a piece of information obtained by applying a one-way mathematical function on a private key. From it, an address can be derived. A private key cannot be found from a public key. +- **Address**: An address is a public string with a human-readable prefix that identifies an account. It is obtained by applying mathematical transformations to a public key. +- **Digital Signature**: A digital signature is a piece of cryptographic information that proves the owner of a given private key approved of a given message without revealing the private key. +- **Seed**: Same as Mnemonic. +- **Mnemonic**: A mnemonic is a sequence of words that is used as seed to derive private keys. The mnemonic is at the core of each wallet. NEVER LOSE YOUR MNEMONIC. WRITE IT DOWN ON A PIECE OF PAPER AND STORE IT SOMEWHERE SAFE. IF YOU LOSE IT, THERE IS NO WAY TO RETRIEVE IT. IF SOMEONE GAINS ACCESS TO IT, THEY GAIN ACCESS TO ALL THE ASSOCIATED ACCOUNTS. -> **NOTE:** Cosmos keys are derived acording to the [BIP 44 Hierarchical Deterministic wallet spec](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki). For more information on Cosmos derivation paths [see the hd package](https://github.com/cosmos/cosmos-sdk/blob/develop/crypto/keys/hd/hdpath.go#L30). +At the core of a HD wallet, there is a seed. From this seed, users can deterministically generate accounts. To generate an account from a seed, one-way mathematical transformations are applied. To decide which account to generate, the user specifies a `path`, generally an `integer` (`0`, `1`, `2`, ...). -Once you have the Cosmos app installed on your Ledger, and the Ledger is accessible from the machine you are using `gaiacli` from you can create a new account key using the Ledger: +By specifying `path` to be `0` for example, the Wallet will generate `Private Key 0` from the seed. Then, `Public Key 0` can be generated from `Private Key 0`. Finally, `Address 0` can be generated from `Public Key 0`. All these steps are one way only, meaning the `Public Key` cannot be found from the `Address`, the `Private Key` cannot be found from the `Public Key`, ... -```bash -$ gaiacli keys add { .Key.Name } --ledger -NAME: TYPE: ADDRESS: PUBKEY: -{ .Key.Name } ledger cosmos1aw64xxr80lwqqdk8u2xhlrkxqaxamkr3e2g943 cosmospub1addwnpepqvhs678gh9aqrjc2tg2vezw86csnvgzqq530ujkunt5tkuc7lhjkz5mj629 +``` + Account 0 Account 1 Account 2 + ++------------------+ +------------------+ +------------------+ +| | | | | | +| Address 0 | | Address 1 | | Address 2 | +| ^ | | ^ | | ^ | +| | | | | | | | | +| | | | | | | | | +| | | | | | | | | +| + | | + | | + | +| Public key 0 | | Public key 1 | | Public key 2 | +| ^ | | ^ | | ^ | +| | | | | | | | | +| | | | | | | | | +| | | | | | | | | +| + | | + | | + | +| Private key 0 | | Private key 1 | | Private key 2 | +| ^ | | ^ | | ^ | ++------------------+ +------------------+ +------------------+ + | | | + | | | + | | | + +--------------------------------------------------------------------+ + | + | + +---------+---------+ + | | + | Mnemonic (Seed) | + | | + +-------------------+ ``` -This key will only be accessible while the Ledger is plugged in and unlocked. To send some coins with this key, run the following: +The process of derivating accounts from the seed is deterministic. This means that given the same path, the derived private key will always be the same. + +The funds stored in an account are controlled by the private key. This private key is generated using a one-way function from the mnemonic. If you lose the private key, you can retrieve it using the mnemonic. However, if you lose the mnemonic, you will lose access to all the derived private keys. Likewise, if someone gains access to your mnemonic, they gain access to all the associated accounts. + +## Ledger Support for account keys + +At the core of a Ledger device, there is a mnemonic that is used to generate private keys. When you initialize you Ledger, a mnemonic is generated. + +::: danger +**Do not lose or share your 12 words with anyone. To prevent theft or loss of funds, it is best to ensure that you keep multiple copies of your mnemonic, and store it in a safe, secure place and that only you know how to access. If someone is able to gain access to your mnemonic, they will be able to gain access to your private keys and control the accounts associated with them.** +::: + +This mnemonic is compatible with Cosmos accounts. The tool used to generate addresses and transactions on the Cosmos Hub network is called `gaiacli`, which supports derivation of account keys from a Ledger seed. Note that the Ledger device acts as an enclave of the seed and private keys, and the process of signing transaction takes place within it. No private information ever leaves the Ledger device. + +To use `gaiacli` with a Ledger device you will need the following: + +- [A Ledger Nano with the `COSMOS` app installed and an account](./delegator-guide-cli.md#using-a-ledger-device) +- [A running `gaiad` instance connected to the network you wish to use.](./delegator-guide-cli.md#accessing-the-cosmos-hub-network) +- [A `gaiacli` instance configured to connect to your chosen `gaiad` instance.](./delegator-guide-cli.md#setting-up-gaiacli) + +Now, you are all set to start [sending transactions on the network](./delegator-guide-cli.md#sending-transactions). + -```bash -$ gaiacli tx send { .Destination.AccAddr } 10stake --from { .Key.Name } --chain-id=gaia-7000 -``` -You will be asked to review and confirm the transaction on the Ledger. Once you do this you should see the result in the console! Now you can use your Ledger to manage your Atoms and Stake! From 1aa6c197ffc57c0ee8cd840148d9b01eeb3786ef Mon Sep 17 00:00:00 2001 From: Alessio Treglia <quadrispro@ubuntu.com> Date: Thu, 14 Feb 2019 16:53:36 +0000 Subject: [PATCH 14/20] Merge PR #3580: Code cleanup of client types --- PENDING.md | 5 + client/keys/add.go | 5 +- client/keys/list.go | 5 +- client/keys/show.go | 3 +- client/keys/utils.go | 25 ---- client/lcd/lcd_test.go | 2 +- client/lcd/test_helpers.go | 57 +++----- client/rest/rest.go | 155 +++------------------ client/rpc/block.go | 10 +- client/rpc/codec.go | 2 +- client/rpc/root.go | 3 +- client/rpc/status.go | 5 +- client/rpc/validators.go | 8 +- client/tx/broadcast.go | 5 +- client/tx/query.go | 2 +- client/tx/search.go | 6 +- client/rest/types.go => types/rest/rest.go | 149 ++++++++++++-------- types/rest/rest_test.go | 66 +++++++++ x/auth/client/rest/broadcast.go | 2 +- x/auth/client/rest/encode.go | 3 +- x/auth/client/rest/query.go | 7 +- x/auth/client/rest/requests.go | 9 ++ x/auth/client/rest/sign.go | 3 +- x/bank/client/rest/sendtx.go | 16 ++- x/distribution/client/rest/query.go | 6 +- x/distribution/client/rest/tx.go | 20 +-- x/gov/client/rest/rest.go | 45 +++--- x/ibc/client/rest/transfer.go | 8 +- x/slashing/client/rest/query.go | 3 +- x/slashing/client/rest/rest.go | 4 +- x/slashing/client/rest/tx.go | 10 +- x/staking/client/rest/query.go | 3 +- x/staking/client/rest/tx.go | 33 +++-- x/staking/client/rest/utils.go | 7 +- 34 files changed, 330 insertions(+), 362 deletions(-) rename client/rest/types.go => types/rest/rest.go (52%) create mode 100644 types/rest/rest_test.go create mode 100644 x/auth/client/rest/requests.go diff --git a/PENDING.md b/PENDING.md index a559992b48..f023471dec 100644 --- a/PENDING.md +++ b/PENDING.md @@ -9,6 +9,11 @@ BREAKING CHANGES * Gaia * SDK + * \#3580 Migrate HTTP request/response types and utilities to types/rest. + * \#3592 Drop deprecated keybase implementation's New() constructor in + favor of a new crypto/keys.New(string, string) implementation that + returns a lazy keybase instance. Remove client.MockKeyBase, + superseded by crypto/keys.NewInMemory() * \#3621 staking.GenesisState.Bonds -> Delegations * Tendermint diff --git a/client/keys/add.go b/client/keys/add.go index 9b437a340b..a6f374e2a2 100644 --- a/client/keys/add.go +++ b/client/keys/add.go @@ -13,6 +13,7 @@ import ( "github.com/cosmos/cosmos-sdk/cmd/gaia/app" "github.com/cosmos/cosmos-sdk/crypto/keys" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/rest" "errors" @@ -399,7 +400,7 @@ func AddNewKeyRequestHandler(indent bool) http.HandlerFunc { keyOutput.Mnemonic = mnemonic - PostProcessResponse(w, cdc, keyOutput, indent) + rest.PostProcessResponse(w, cdc, keyOutput, indent) } } @@ -488,6 +489,6 @@ func RecoverRequestHandler(indent bool) http.HandlerFunc { return } - PostProcessResponse(w, cdc, keyOutput, indent) + rest.PostProcessResponse(w, cdc, keyOutput, indent) } } diff --git a/client/keys/list.go b/client/keys/list.go index 81a45d0b70..4dda3a86b8 100644 --- a/client/keys/list.go +++ b/client/keys/list.go @@ -3,6 +3,7 @@ package keys import ( "net/http" + "github.com/cosmos/cosmos-sdk/types/rest" "github.com/spf13/cobra" ) @@ -49,7 +50,7 @@ func QueryKeysRequestHandler(indent bool) http.HandlerFunc { } // an empty list will be JSONized as null, but we want to keep the empty list if len(infos) == 0 { - PostProcessResponse(w, cdc, []string{}, indent) + rest.PostProcessResponse(w, cdc, []string{}, indent) return } keysOutput, err := Bech32KeysOutput(infos) @@ -58,6 +59,6 @@ func QueryKeysRequestHandler(indent bool) http.HandlerFunc { _, _ = w.Write([]byte(err.Error())) return } - PostProcessResponse(w, cdc, keysOutput, indent) + rest.PostProcessResponse(w, cdc, keysOutput, indent) } } diff --git a/client/keys/show.go b/client/keys/show.go index 4c1ddf216c..903dfeb192 100644 --- a/client/keys/show.go +++ b/client/keys/show.go @@ -7,6 +7,7 @@ import ( "github.com/tendermint/tendermint/crypto" "github.com/cosmos/cosmos-sdk/crypto/keys" + "github.com/cosmos/cosmos-sdk/types/rest" "errors" @@ -188,6 +189,6 @@ func GetKeyRequestHandler(indent bool) http.HandlerFunc { return } - PostProcessResponse(w, cdc, keyOutput, indent) + rest.PostProcessResponse(w, cdc, keyOutput, indent) } } diff --git a/client/keys/utils.go b/client/keys/utils.go index d5c2f2f55b..976654ba26 100644 --- a/client/keys/utils.go +++ b/client/keys/utils.go @@ -2,14 +2,12 @@ package keys import ( "fmt" - "net/http" "path/filepath" "github.com/spf13/viper" "github.com/tendermint/tendermint/libs/cli" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/crypto/keys" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -217,26 +215,3 @@ func printPubKey(info keys.Info, bechKeyOut bechKeyOutFn) { fmt.Println(ko.PubKey) } - -// PostProcessResponse performs post process for rest response -func PostProcessResponse(w http.ResponseWriter, cdc *codec.Codec, response interface{}, indent bool) { - var output []byte - switch response.(type) { - default: - var err error - if indent { - output, err = cdc.MarshalJSONIndent(response, "", " ") - } else { - output, err = cdc.MarshalJSON(response) - } - if err != nil { - w.WriteHeader(http.StatusInternalServerError) - _, _ = w.Write([]byte(err.Error())) - return - } - case []byte: - output = response.([]byte) - } - w.Header().Set("Content-Type", "application/json") - _, _ = w.Write(output) -} diff --git a/client/lcd/lcd_test.go b/client/lcd/lcd_test.go index 6cdaf03318..33a02adfe7 100644 --- a/client/lcd/lcd_test.go +++ b/client/lcd/lcd_test.go @@ -15,11 +15,11 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/keys" - "github.com/cosmos/cosmos-sdk/client/rest" "github.com/cosmos/cosmos-sdk/cmd/gaia/app" "github.com/cosmos/cosmos-sdk/crypto/keys/mintkey" "github.com/cosmos/cosmos-sdk/tests" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/rest" "github.com/cosmos/cosmos-sdk/version" "github.com/cosmos/cosmos-sdk/x/auth" authrest "github.com/cosmos/cosmos-sdk/x/auth/client/rest" diff --git a/client/lcd/test_helpers.go b/client/lcd/test_helpers.go index ede3b4cfdb..787f440494 100644 --- a/client/lcd/test_helpers.go +++ b/client/lcd/test_helpers.go @@ -20,7 +20,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/keys" - "github.com/cosmos/cosmos-sdk/client/rest" + "github.com/cosmos/cosmos-sdk/client/rpc" "github.com/cosmos/cosmos-sdk/client/tx" gapp "github.com/cosmos/cosmos-sdk/cmd/gaia/app" @@ -29,6 +29,7 @@ import ( "github.com/cosmos/cosmos-sdk/server" "github.com/cosmos/cosmos-sdk/tests" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/rest" "github.com/cosmos/cosmos-sdk/x/auth" authrest "github.com/cosmos/cosmos-sdk/x/auth/client/rest" txbuilder "github.com/cosmos/cosmos-sdk/x/auth/client/txbuilder" @@ -130,7 +131,7 @@ func CreateAddrs(t *testing.T, kb crkeys.Keybase, numAddrs int) (addrs []sdk.Acc password := "1234567890" info, seed, err = kb.CreateMnemonic(name, crkeys.English, password, crkeys.Secp256k1) require.NoError(t, err) - addrSeeds = append(addrSeeds, rest.AddrSeed{Address: sdk.AccAddress(info.GetPubKey().Address()), Seed: seed, Name: name, Password: password}) + addrSeeds = append(addrSeeds, AddrSeed{Address: sdk.AccAddress(info.GetPubKey().Address()), Seed: seed, Name: name, Password: password}) } sort.Sort(addrSeeds) @@ -145,8 +146,16 @@ func CreateAddrs(t *testing.T, kb crkeys.Keybase, numAddrs int) (addrs []sdk.Acc return addrs, seeds, names, passwords } +// AddrSeed combines an Address with the mnemonic of the private key to that address +type AddrSeed struct { + Address sdk.AccAddress + Seed string + Name string + Password string +} + // AddrSeedSlice implements `Interface` in sort package. -type AddrSeedSlice []rest.AddrSeed +type AddrSeedSlice []AddrSeed func (b AddrSeedSlice) Len() int { return len(b) @@ -653,7 +662,7 @@ func doSign(t *testing.T, port, name, password, chainID string, accnum, sequence // POST /tx/broadcast Send a signed Tx func doBroadcast(t *testing.T, port string, msg auth.StdTx) sdk.TxResponse { - tx := rest.BroadcastReq{Tx: msg, Return: "block"} + tx := authrest.BroadcastReq{Tx: msg, Return: "block"} req, err := cdc.MarshalJSON(tx) require.Nil(t, err) res, body := Request(t, port, "POST", "/tx/broadcast", req) @@ -706,7 +715,7 @@ func doTransferWithGas( generateOnly, simulate, ) - sr := rest.SendReq{ + sr := bankrest.SendReq{ Amount: sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 1)}, BaseReq: baseReq, } @@ -739,7 +748,7 @@ func doTransferWithGasAccAuto( fmt.Sprintf("%f", gasAdjustment), 0, 0, fees, nil, generateOnly, simulate, ) - sr := rest.SendReq{ + sr := bankrest.SendReq{ Amount: sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 1)}, BaseReq: baseReq, } @@ -751,11 +760,6 @@ func doTransferWithGasAccAuto( return } -type sendReq struct { - Amount sdk.Coins `json:"amount"` - BaseReq rest.BaseReq `json:"base_req"` -} - // ---------------------------------------------------------------------- // ICS 21 - Stake // ---------------------------------------------------------------------- @@ -841,7 +845,7 @@ func doBeginRedelegation(t *testing.T, port, name, password string, chainID := viper.GetString(client.FlagChainID) baseReq := rest.NewBaseReq(name, password, "", chainID, "", "", accnum, sequence, fees, nil, false, false) - msg := rest.MsgBeginRedelegateInput{ + msg := stakingrest.MsgBeginRedelegateInput{ BaseReq: baseReq, DelegatorAddr: delAddr, ValidatorSrcAddr: valSrcAddr, @@ -1074,7 +1078,7 @@ func doSubmitProposal(t *testing.T, port, seed, name, password string, proposerA chainID := viper.GetString(client.FlagChainID) baseReq := rest.NewBaseReq(name, password, "", chainID, "", "", accnum, sequence, fees, nil, false, false) - pr := rest.PostProposalReq{ + pr := govrest.PostProposalReq{ Title: "Test", Description: "test", ProposalType: "Text", @@ -1097,15 +1101,6 @@ func doSubmitProposal(t *testing.T, port, seed, name, password string, proposerA return results } -type postProposalReq struct { - BaseReq rest.BaseReq `json:"base_req"` - Title string `json:"title"` // Title of the proposal - Description string `json:"description"` // Description of the proposal - ProposalType string `json:"proposal_type"` // Type of proposal. Initial set {PlainTextProposal, SoftwareUpgradeProposal} - Proposer sdk.AccAddress `json:"proposer"` // Address of the proposer - InitialDeposit sdk.Coins `json:"initial_deposit"` // Coins to add to the proposal's deposit -} - // GET /gov/proposals Query proposals func getProposalsAll(t *testing.T, port string) []gov.Proposal { res, body := Request(t, port, "GET", "/gov/proposals", nil) @@ -1171,7 +1166,7 @@ func doDeposit(t *testing.T, port, seed, name, password string, proposerAddr sdk chainID := viper.GetString(client.FlagChainID) baseReq := rest.NewBaseReq(name, password, "", chainID, "", "", accnum, sequence, fees, nil, false, false) - dr := rest.DepositReq{ + dr := govrest.DepositReq{ Depositor: proposerAddr, Amount: sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, amount)}, BaseReq: baseReq, @@ -1190,12 +1185,6 @@ func doDeposit(t *testing.T, port, seed, name, password string, proposerAddr sdk return results } -type depositReq struct { - BaseReq rest.BaseReq `json:"base_req"` - Depositor sdk.AccAddress `json:"depositor"` // Address of the depositor - Amount sdk.Coins `json:"amount"` // Coins to add to the proposal's deposit -} - // GET /gov/proposals/{proposalId}/deposits Query deposits func getDeposits(t *testing.T, port string, proposalID uint64) []gov.Deposit { res, body := Request(t, port, "GET", fmt.Sprintf("/gov/proposals/%d/deposits", proposalID), nil) @@ -1225,7 +1214,7 @@ func doVote(t *testing.T, port, seed, name, password string, proposerAddr sdk.Ac chainID := viper.GetString(client.FlagChainID) baseReq := rest.NewBaseReq(name, password, "", chainID, "", "", accnum, sequence, fees, nil, false, false) - vr := rest.VoteReq{ + vr := govrest.VoteReq{ Voter: proposerAddr, Option: option, BaseReq: baseReq, @@ -1244,12 +1233,6 @@ func doVote(t *testing.T, port, seed, name, password string, proposerAddr sdk.Ac return results } -type voteReq struct { - BaseReq rest.BaseReq `json:"base_req"` - Voter sdk.AccAddress `json:"voter"` // address of the voter - Option string `json:"option"` // option from OptionSet chosen by the voter -} - // GET /gov/proposals/{proposalId}/votes Query voters func getVotes(t *testing.T, port string, proposalID uint64) []gov.Vote { res, body := Request(t, port, "GET", fmt.Sprintf("/gov/proposals/%d/votes", proposalID), nil) @@ -1357,7 +1340,7 @@ func doUnjail(t *testing.T, port, seed, name, password string, chainID := viper.GetString(client.FlagChainID) baseReq := rest.NewBaseReq(name, password, "", chainID, "", "", 1, 1, fees, nil, false, false) - ur := rest.UnjailReq{ + ur := slashingrest.UnjailReq{ BaseReq: baseReq, } req, err := cdc.MarshalJSON(ur) diff --git a/client/rest/rest.go b/client/rest/rest.go index 80f48ff298..d5cc7bab11 100644 --- a/client/rest/rest.go +++ b/client/rest/rest.go @@ -1,9 +1,7 @@ package rest import ( - "fmt" "net/http" - "strconv" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/context" @@ -11,91 +9,11 @@ import ( "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/crypto/keys/keyerror" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/rest" "github.com/cosmos/cosmos-sdk/x/auth" authtxb "github.com/cosmos/cosmos-sdk/x/auth/client/txbuilder" ) -//----------------------------------------------------------------------------- -// Basic HTTP utilities - -// ErrorResponse defines the attributes of a JSON error response. -type ErrorResponse struct { - Code int `json:"code,omitempty"` - Message string `json:"message"` -} - -// NewErrorResponse creates a new ErrorResponse instance. -func NewErrorResponse(code int, msg string) ErrorResponse { - return ErrorResponse{Code: code, Message: msg} -} - -// WriteErrorResponse prepares and writes a HTTP error -// given a status code and an error message. -func WriteErrorResponse(w http.ResponseWriter, status int, err string) { - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(status) - w.Write(codec.Cdc.MustMarshalJSON(NewErrorResponse(0, err))) -} - -// WriteSimulationResponse prepares and writes an HTTP -// response for transactions simulations. -func WriteSimulationResponse(w http.ResponseWriter, cdc *codec.Codec, gas uint64) { - gasEst := GasEstimateResponse{GasEstimate: gas} - resp, err := cdc.MarshalJSON(gasEst) - if err != nil { - WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) - return - } - - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(http.StatusOK) - w.Write(resp) -} - -// ParseInt64OrReturnBadRequest converts s to a int64 value. -func ParseInt64OrReturnBadRequest(w http.ResponseWriter, s string) (n int64, ok bool) { - var err error - - n, err = strconv.ParseInt(s, 10, 64) - if err != nil { - err := fmt.Errorf("'%s' is not a valid int64", s) - WriteErrorResponse(w, http.StatusBadRequest, err.Error()) - return n, false - } - - return n, true -} - -// ParseUint64OrReturnBadRequest converts s to a uint64 value. -func ParseUint64OrReturnBadRequest(w http.ResponseWriter, s string) (n uint64, ok bool) { - var err error - - n, err = strconv.ParseUint(s, 10, 64) - if err != nil { - err := fmt.Errorf("'%s' is not a valid uint64", s) - WriteErrorResponse(w, http.StatusBadRequest, err.Error()) - return n, false - } - - return n, true -} - -// ParseFloat64OrReturnBadRequest converts s to a float64 value. It returns a -// default value, defaultIfEmpty, if the string is empty. -func ParseFloat64OrReturnBadRequest(w http.ResponseWriter, s string, defaultIfEmpty float64) (n float64, ok bool) { - if len(s) == 0 { - return defaultIfEmpty, true - } - - n, err := strconv.ParseFloat(s, 64) - if err != nil { - WriteErrorResponse(w, http.StatusBadRequest, err.Error()) - return n, false - } - - return n, true -} - //----------------------------------------------------------------------------- // Building / Sending utilities @@ -104,26 +22,24 @@ func ParseFloat64OrReturnBadRequest(w http.ResponseWriter, s string, defaultIfEm // tx gas simulation and estimation. // // NOTE: Also see CompleteAndBroadcastTxCLI. -func CompleteAndBroadcastTxREST( - w http.ResponseWriter, r *http.Request, cliCtx context.CLIContext, - baseReq BaseReq, msgs []sdk.Msg, cdc *codec.Codec, -) { +func CompleteAndBroadcastTxREST(w http.ResponseWriter, cliCtx context.CLIContext, + baseReq rest.BaseReq, msgs []sdk.Msg, cdc *codec.Codec) { - gasAdj, ok := ParseFloat64OrReturnBadRequest(w, baseReq.GasAdjustment, client.DefaultGasAdjustment) + gasAdj, ok := rest.ParseFloat64OrReturnBadRequest(w, baseReq.GasAdjustment, client.DefaultGasAdjustment) if !ok { return } simAndExec, gas, err := client.ParseGas(baseReq.Gas) if err != nil { - WriteErrorResponse(w, http.StatusBadRequest, err.Error()) + rest.WriteErrorResponse(w, http.StatusBadRequest, err.Error()) return } // derive the from account address and name from the Keybase fromAddress, fromName, err := context.GetFromFields(baseReq.From) if err != nil { - WriteErrorResponse(w, http.StatusBadRequest, err.Error()) + rest.WriteErrorResponse(w, http.StatusBadRequest, err.Error()) return } @@ -136,86 +52,61 @@ func CompleteAndBroadcastTxREST( txBldr, err = utils.PrepareTxBuilder(txBldr, cliCtx) if err != nil { - WriteErrorResponse(w, http.StatusBadRequest, err.Error()) + rest.WriteErrorResponse(w, http.StatusBadRequest, err.Error()) return } if baseReq.Simulate || simAndExec { if gasAdj < 0 { - WriteErrorResponse(w, http.StatusBadRequest, client.ErrInvalidGasAdjustment.Error()) + rest.WriteErrorResponse(w, http.StatusBadRequest, client.ErrInvalidGasAdjustment.Error()) return } txBldr, err = utils.EnrichWithGas(txBldr, cliCtx, msgs) if err != nil { - WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) + rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) return } if baseReq.Simulate { - WriteSimulationResponse(w, cdc, txBldr.Gas()) + rest.WriteSimulationResponse(w, cdc, txBldr.Gas()) return } } txBytes, err := txBldr.BuildAndSign(cliCtx.GetFromName(), baseReq.Password, msgs) if keyerror.IsErrKeyNotFound(err) { - WriteErrorResponse(w, http.StatusBadRequest, err.Error()) + rest.WriteErrorResponse(w, http.StatusBadRequest, err.Error()) return } else if keyerror.IsErrWrongPassword(err) { - WriteErrorResponse(w, http.StatusUnauthorized, err.Error()) + rest.WriteErrorResponse(w, http.StatusUnauthorized, err.Error()) return } else if err != nil { - WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) + rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) return } res, err := cliCtx.BroadcastTx(txBytes) if err != nil { - WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) + rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) return } - PostProcessResponse(w, cdc, res, cliCtx.Indent) -} - -// PostProcessResponse performs post processing for a REST response. -func PostProcessResponse(w http.ResponseWriter, cdc *codec.Codec, response interface{}, indent bool) { - var output []byte - - switch response.(type) { - default: - var err error - if indent { - output, err = cdc.MarshalJSONIndent(response, "", " ") - } else { - output, err = cdc.MarshalJSON(response) - } - if err != nil { - WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) - return - } - case []byte: - output = response.([]byte) - } - - w.Header().Set("Content-Type", "application/json") - w.Write(output) + rest.PostProcessResponse(w, cdc, res, cliCtx.Indent) } // WriteGenerateStdTxResponse writes response for the generate only mode. -func WriteGenerateStdTxResponse( - w http.ResponseWriter, cdc *codec.Codec, cliCtx context.CLIContext, br BaseReq, msgs []sdk.Msg, -) { +func WriteGenerateStdTxResponse(w http.ResponseWriter, cdc *codec.Codec, + cliCtx context.CLIContext, br rest.BaseReq, msgs []sdk.Msg) { - gasAdj, ok := ParseFloat64OrReturnBadRequest(w, br.GasAdjustment, client.DefaultGasAdjustment) + gasAdj, ok := rest.ParseFloat64OrReturnBadRequest(w, br.GasAdjustment, client.DefaultGasAdjustment) if !ok { return } simAndExec, gas, err := client.ParseGas(br.Gas) if err != nil { - WriteErrorResponse(w, http.StatusBadRequest, err.Error()) + rest.WriteErrorResponse(w, http.StatusBadRequest, err.Error()) return } @@ -226,26 +117,26 @@ func WriteGenerateStdTxResponse( if simAndExec { if gasAdj < 0 { - WriteErrorResponse(w, http.StatusBadRequest, client.ErrInvalidGasAdjustment.Error()) + rest.WriteErrorResponse(w, http.StatusBadRequest, client.ErrInvalidGasAdjustment.Error()) return } txBldr, err = utils.EnrichWithGas(txBldr, cliCtx, msgs) if err != nil { - WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) + rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) return } } stdMsg, err := txBldr.BuildSignMsg(msgs) if err != nil { - WriteErrorResponse(w, http.StatusBadRequest, err.Error()) + rest.WriteErrorResponse(w, http.StatusBadRequest, err.Error()) return } output, err := cdc.MarshalJSON(auth.NewStdTx(stdMsg.Msgs, stdMsg.Fee, nil, stdMsg.Memo)) if err != nil { - WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) + rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) return } diff --git a/client/rpc/block.go b/client/rpc/block.go index d5aaecc1f3..127e9c9c8d 100644 --- a/client/rpc/block.go +++ b/client/rpc/block.go @@ -5,14 +5,14 @@ import ( "net/http" "strconv" - "github.com/cosmos/cosmos-sdk/client/rest" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/context" - "github.com/gorilla/mux" "github.com/spf13/cobra" "github.com/spf13/viper" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/context" + "github.com/cosmos/cosmos-sdk/types/rest" + tmliteProxy "github.com/tendermint/tendermint/lite/proxy" ) diff --git a/client/rpc/codec.go b/client/rpc/codec.go index 841366fef1..1a64ee4aee 100644 --- a/client/rpc/codec.go +++ b/client/rpc/codec.go @@ -1,7 +1,7 @@ package rpc import ( - amino "github.com/tendermint/go-amino" + "github.com/tendermint/go-amino" ctypes "github.com/tendermint/tendermint/rpc/core/types" ) diff --git a/client/rpc/root.go b/client/rpc/root.go index 6ea831cac8..45533e3eaa 100644 --- a/client/rpc/root.go +++ b/client/rpc/root.go @@ -4,11 +4,10 @@ import ( "fmt" "net/http" - "github.com/cosmos/cosmos-sdk/client/rest" - "github.com/gorilla/mux" "github.com/cosmos/cosmos-sdk/client/context" + "github.com/cosmos/cosmos-sdk/types/rest" "github.com/cosmos/cosmos-sdk/version" ) diff --git a/client/rpc/status.go b/client/rpc/status.go index 438346f165..e017fa860c 100644 --- a/client/rpc/status.go +++ b/client/rpc/status.go @@ -5,15 +5,14 @@ import ( "net/http" "strconv" - "github.com/cosmos/cosmos-sdk/client/rest" - "github.com/spf13/cobra" - "github.com/spf13/viper" + ctypes "github.com/tendermint/tendermint/rpc/core/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/context" + "github.com/cosmos/cosmos-sdk/types/rest" ) // StatusCommand returns the status of the network diff --git a/client/rpc/validators.go b/client/rpc/validators.go index 091ac97e8a..90389bf643 100644 --- a/client/rpc/validators.go +++ b/client/rpc/validators.go @@ -7,19 +7,17 @@ import ( "strconv" "strings" - "github.com/cosmos/cosmos-sdk/codec" - - "github.com/cosmos/cosmos-sdk/client/rest" - "github.com/gorilla/mux" "github.com/spf13/cobra" - "github.com/spf13/viper" + tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/context" + "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/rest" ) // TODO these next two functions feel kinda hacky based on their placement diff --git a/client/tx/broadcast.go b/client/tx/broadcast.go index 9dd7b3abd6..e75a8cdc44 100644 --- a/client/tx/broadcast.go +++ b/client/tx/broadcast.go @@ -3,7 +3,7 @@ package tx import ( "net/http" - "github.com/cosmos/cosmos-sdk/client/rest" + "github.com/cosmos/cosmos-sdk/types/rest" "io/ioutil" @@ -50,7 +50,8 @@ func BroadcastTxRequest(cliCtx context.CLIContext, cdc *codec.Codec) http.Handle case flagAsync: res, err = cliCtx.BroadcastTxAsync(m.TxBytes) default: - rest.WriteErrorResponse(w, http.StatusInternalServerError, "unsupported return type. supported types: block, sync, async") + rest.WriteErrorResponse(w, http.StatusInternalServerError, + "unsupported return type. supported types: block, sync, async") return } if err != nil { diff --git a/client/tx/query.go b/client/tx/query.go index cbf64f34ec..ea54814f28 100644 --- a/client/tx/query.go +++ b/client/tx/query.go @@ -13,9 +13,9 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/context" - "github.com/cosmos/cosmos-sdk/client/rest" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/rest" "github.com/cosmos/cosmos-sdk/x/auth" ) diff --git a/client/tx/search.go b/client/tx/search.go index 91c3b32c43..718ab5d030 100644 --- a/client/tx/search.go +++ b/client/tx/search.go @@ -8,12 +8,11 @@ import ( "strconv" "strings" - "github.com/cosmos/cosmos-sdk/client/rest" - "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/context" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/rest" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -176,7 +175,8 @@ func SearchTxRequestHandlerFn(cliCtx context.CLIContext, cdc *codec.Codec) http. var txs []sdk.TxResponse err := r.ParseForm() if err != nil { - rest.WriteErrorResponse(w, http.StatusBadRequest, sdk.AppendMsgToErr("could not parse query parameters", err.Error())) + rest.WriteErrorResponse(w, http.StatusBadRequest, + sdk.AppendMsgToErr("could not parse query parameters", err.Error())) return } if len(r.Form) == 0 { diff --git a/client/rest/types.go b/types/rest/rest.go similarity index 52% rename from client/rest/types.go rename to types/rest/rest.go index 0595042ba7..f40fff7471 100644 --- a/client/rest/types.go +++ b/types/rest/rest.go @@ -1,14 +1,16 @@ +// Package rest provides HTTP types and primitives for REST +// requests validation and responses handling. package rest import ( "fmt" "io/ioutil" "net/http" + "strconv" "strings" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/auth" ) // GasEstimateResponse defines a response definition for tx gas estimation. @@ -97,21 +99,8 @@ func (br BaseReq) ValidateBasic(w http.ResponseWriter) bool { return true } -/* -ReadRESTReq is a simple convenience wrapper that reads the body and -unmarshals to the req interface. Returns false if errors occurred. - - Usage: - type SomeReq struct { - BaseReq `json:"base_req"` - CustomField string `json:"custom_field"` - } - - req := new(SomeReq) - if ok := ReadRESTReq(w, r, cdc, req); !ok { - return - } -*/ +// ReadRESTReq reads and unmarshals a Request's body to the the BaseReq stuct. +// Writes an error response to ResponseWriter and returns true if errors occurred. func ReadRESTReq(w http.ResponseWriter, r *http.Request, cdc *codec.Codec, req interface{}) bool { body, err := ioutil.ReadAll(r.Body) if err != nil { @@ -128,60 +117,104 @@ func ReadRESTReq(w http.ResponseWriter, r *http.Request, cdc *codec.Codec, req i return true } -// AddrSeed combines an Address with the mnemonic of the private key to that address -type AddrSeed struct { - Address sdk.AccAddress - Seed string - Name string - Password string +// ErrorResponse defines the attributes of a JSON error response. +type ErrorResponse struct { + Code int `json:"code,omitempty"` + Message string `json:"message"` } -// SendReq requests sending an amount of coins -type SendReq struct { - Amount sdk.Coins `json:"amount"` - BaseReq BaseReq `json:"base_req"` +// NewErrorResponse creates a new ErrorResponse instance. +func NewErrorResponse(code int, msg string) ErrorResponse { + return ErrorResponse{Code: code, Message: msg} } -// MsgBeginRedelegateInput request to begin a redelegation -type MsgBeginRedelegateInput struct { - BaseReq BaseReq `json:"base_req"` - DelegatorAddr sdk.AccAddress `json:"delegator_addr"` // in bech32 - ValidatorSrcAddr sdk.ValAddress `json:"validator_src_addr"` // in bech32 - ValidatorDstAddr sdk.ValAddress `json:"validator_dst_addr"` // in bech32 - SharesAmount sdk.Dec `json:"shares"` +// WriteErrorResponse prepares and writes a HTTP error +// given a status code and an error message. +func WriteErrorResponse(w http.ResponseWriter, status int, err string) { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(status) + _, _ = w.Write(codec.Cdc.MustMarshalJSON(NewErrorResponse(0, err))) } -// PostProposalReq requests a proposals -type PostProposalReq struct { - BaseReq BaseReq `json:"base_req"` - Title string `json:"title"` // Title of the proposal - Description string `json:"description"` // Description of the proposal - ProposalType string `json:"proposal_type"` // Type of proposal. Initial set {PlainTextProposal, SoftwareUpgradeProposal} - Proposer sdk.AccAddress `json:"proposer"` // Address of the proposer - InitialDeposit sdk.Coins `json:"initial_deposit"` // Coins to add to the proposal's deposit +// WriteSimulationResponse prepares and writes an HTTP +// response for transactions simulations. +func WriteSimulationResponse(w http.ResponseWriter, cdc *codec.Codec, gas uint64) { + gasEst := GasEstimateResponse{GasEstimate: gas} + resp, err := cdc.MarshalJSON(gasEst) + if err != nil { + WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) + return + } + + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + _, _ = w.Write(resp) } -// BroadcastReq requests broadcasting a transaction -type BroadcastReq struct { - Tx auth.StdTx `json:"tx"` - Return string `json:"return"` +// ParseInt64OrReturnBadRequest converts s to a int64 value. +func ParseInt64OrReturnBadRequest(w http.ResponseWriter, s string) (n int64, ok bool) { + var err error + + n, err = strconv.ParseInt(s, 10, 64) + if err != nil { + err := fmt.Errorf("'%s' is not a valid int64", s) + WriteErrorResponse(w, http.StatusBadRequest, err.Error()) + return n, false + } + + return n, true } -// DepositReq requests a deposit of an amount of coins -type DepositReq struct { - BaseReq BaseReq `json:"base_req"` - Depositor sdk.AccAddress `json:"depositor"` // Address of the depositor - Amount sdk.Coins `json:"amount"` // Coins to add to the proposal's deposit +// ParseUint64OrReturnBadRequest converts s to a uint64 value. +func ParseUint64OrReturnBadRequest(w http.ResponseWriter, s string) (n uint64, ok bool) { + var err error + + n, err = strconv.ParseUint(s, 10, 64) + if err != nil { + err := fmt.Errorf("'%s' is not a valid uint64", s) + WriteErrorResponse(w, http.StatusBadRequest, err.Error()) + return n, false + } + + return n, true } -// VoteReq requests sending a vote -type VoteReq struct { - BaseReq BaseReq `json:"base_req"` - Voter sdk.AccAddress `json:"voter"` // address of the voter - Option string `json:"option"` // option from OptionSet chosen by the voter +// ParseFloat64OrReturnBadRequest converts s to a float64 value. It returns a +// default value, defaultIfEmpty, if the string is empty. +func ParseFloat64OrReturnBadRequest(w http.ResponseWriter, s string, defaultIfEmpty float64) (n float64, ok bool) { + if len(s) == 0 { + return defaultIfEmpty, true + } + + n, err := strconv.ParseFloat(s, 64) + if err != nil { + WriteErrorResponse(w, http.StatusBadRequest, err.Error()) + return n, false + } + + return n, true } -// UnjailReq request unjailing -type UnjailReq struct { - BaseReq BaseReq `json:"base_req"` +// PostProcessResponse performs post processing for a REST response. +func PostProcessResponse(w http.ResponseWriter, cdc *codec.Codec, response interface{}, indent bool) { + var output []byte + + switch response.(type) { + default: + var err error + if indent { + output, err = cdc.MarshalJSONIndent(response, "", " ") + } else { + output, err = cdc.MarshalJSON(response) + } + if err != nil { + WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) + return + } + case []byte: + output = response.([]byte) + } + + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write(output) } diff --git a/types/rest/rest_test.go b/types/rest/rest_test.go new file mode 100644 index 0000000000..56c2eac82c --- /dev/null +++ b/types/rest/rest_test.go @@ -0,0 +1,66 @@ +// Package rest provides HTTP types and primitives for REST +// requests validation and responses handling. +package rest + +import ( + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/cosmos/cosmos-sdk/types" +) + +type mockResponseWriter struct{} + +func TestBaseReq_ValidateBasic(t *testing.T) { + tenstakes, err := types.ParseCoins("10stake") + require.NoError(t, err) + onestake, err := types.ParseDecCoins("1.0stake") + require.NoError(t, err) + + req1 := NewBaseReq( + "nonempty", "nonempty", "", "nonempty", "", "", + 0, 0, tenstakes, nil, false, false, + ) + req2 := NewBaseReq( + "", "nonempty", "", "nonempty", "", "", + 0, 0, tenstakes, nil, false, false, + ) + req3 := NewBaseReq( + "nonempty", "", "", "nonempty", "", "", + 0, 0, tenstakes, nil, false, false, + ) + req4 := NewBaseReq( + "nonempty", "nonempty", "", "", "", "", + 0, 0, tenstakes, nil, false, false, + ) + req5 := NewBaseReq( + "nonempty", "nonempty", "", "nonempty", "", "", + 0, 0, tenstakes, onestake, false, false, + ) + req6 := NewBaseReq( + "nonempty", "nonempty", "", "nonempty", "", "", + 0, 0, types.Coins{}, types.DecCoins{}, false, false, + ) + + tests := []struct { + name string + req BaseReq + w http.ResponseWriter + want bool + }{ + {"ok", req1, httptest.NewRecorder(), true}, + {"neither fees nor gasprices provided", req6, httptest.NewRecorder(), true}, + {"empty from", req2, httptest.NewRecorder(), false}, + {"empty password", req3, httptest.NewRecorder(), false}, + {"empty chain-id", req4, httptest.NewRecorder(), false}, + {"fees and gasprices provided", req5, httptest.NewRecorder(), false}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + require.Equal(t, tt.want, tt.req.ValidateBasic(tt.w)) + }) + } +} diff --git a/x/auth/client/rest/broadcast.go b/x/auth/client/rest/broadcast.go index 3d923589a2..2e0cc9c42a 100644 --- a/x/auth/client/rest/broadcast.go +++ b/x/auth/client/rest/broadcast.go @@ -5,8 +5,8 @@ import ( "net/http" "github.com/cosmos/cosmos-sdk/client/context" - "github.com/cosmos/cosmos-sdk/client/rest" "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/types/rest" "github.com/cosmos/cosmos-sdk/x/auth" ) diff --git a/x/auth/client/rest/encode.go b/x/auth/client/rest/encode.go index bac646038b..97c25f15f6 100644 --- a/x/auth/client/rest/encode.go +++ b/x/auth/client/rest/encode.go @@ -5,8 +5,9 @@ import ( "net/http" "github.com/cosmos/cosmos-sdk/client/context" - "github.com/cosmos/cosmos-sdk/client/rest" "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/types/rest" + "github.com/cosmos/cosmos-sdk/x/auth" ) diff --git a/x/auth/client/rest/query.go b/x/auth/client/rest/query.go index 97810cecf1..70301aa7fb 100644 --- a/x/auth/client/rest/query.go +++ b/x/auth/client/rest/query.go @@ -3,13 +3,14 @@ package rest import ( "net/http" + "github.com/gorilla/mux" + "github.com/cosmos/cosmos-sdk/client/context" - "github.com/cosmos/cosmos-sdk/client/rest" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/auth" + "github.com/cosmos/cosmos-sdk/types/rest" - "github.com/gorilla/mux" + "github.com/cosmos/cosmos-sdk/x/auth" ) // register REST routes diff --git a/x/auth/client/rest/requests.go b/x/auth/client/rest/requests.go new file mode 100644 index 0000000000..2910c21584 --- /dev/null +++ b/x/auth/client/rest/requests.go @@ -0,0 +1,9 @@ +package rest + +import "github.com/cosmos/cosmos-sdk/x/auth" + +// BroadcastReq requests broadcasting a transaction +type BroadcastReq struct { + Tx auth.StdTx `json:"tx"` + Return string `json:"return"` +} diff --git a/x/auth/client/rest/sign.go b/x/auth/client/rest/sign.go index 67572eefe0..deae5ce6bd 100644 --- a/x/auth/client/rest/sign.go +++ b/x/auth/client/rest/sign.go @@ -4,11 +4,12 @@ import ( "net/http" "github.com/cosmos/cosmos-sdk/client/context" - "github.com/cosmos/cosmos-sdk/client/rest" "github.com/cosmos/cosmos-sdk/client/utils" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/crypto/keys/keyerror" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/rest" + "github.com/cosmos/cosmos-sdk/x/auth" authtxb "github.com/cosmos/cosmos-sdk/x/auth/client/txbuilder" ) diff --git a/x/bank/client/rest/sendtx.go b/x/bank/client/rest/sendtx.go index e602539dcc..73d0a42cee 100644 --- a/x/bank/client/rest/sendtx.go +++ b/x/bank/client/rest/sendtx.go @@ -3,15 +3,16 @@ package rest import ( "net/http" - "github.com/cosmos/cosmos-sdk/client/rest" + "github.com/gorilla/mux" "github.com/cosmos/cosmos-sdk/client/context" + clientrest "github.com/cosmos/cosmos-sdk/client/rest" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/crypto/keys" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/bank" + "github.com/cosmos/cosmos-sdk/types/rest" - "github.com/gorilla/mux" + "github.com/cosmos/cosmos-sdk/x/bank" ) // RegisterRoutes - Central function to define routes that get registered by the main application @@ -19,7 +20,8 @@ func RegisterRoutes(cliCtx context.CLIContext, r *mux.Router, cdc *codec.Codec, r.HandleFunc("/bank/accounts/{address}/transfers", SendRequestHandlerFn(cdc, kb, cliCtx)).Methods("POST") } -type sendReq struct { +// SendReq defines the properties of a send request's body. +type SendReq struct { BaseReq rest.BaseReq `json:"base_req"` Amount sdk.Coins `json:"amount"` } @@ -42,7 +44,7 @@ func SendRequestHandlerFn(cdc *codec.Codec, kb keys.Keybase, cliCtx context.CLIC return } - var req sendReq + var req SendReq if !rest.ReadRESTReq(w, r, cdc, &req) { return } @@ -62,7 +64,7 @@ func SendRequestHandlerFn(cdc *codec.Codec, kb keys.Keybase, cliCtx context.CLIC } msg := bank.NewMsgSend(fromAddr, toAddr, req.Amount) - rest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, []sdk.Msg{msg}) + clientrest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, []sdk.Msg{msg}) return } @@ -76,6 +78,6 @@ func SendRequestHandlerFn(cdc *codec.Codec, kb keys.Keybase, cliCtx context.CLIC cliCtx = cliCtx.WithFromName(fromName).WithFromAddress(fromAddress) msg := bank.NewMsgSend(cliCtx.GetFromAddress(), toAddr, req.Amount) - rest.CompleteAndBroadcastTxREST(w, r, cliCtx, req.BaseReq, []sdk.Msg{msg}, cdc) + clientrest.CompleteAndBroadcastTxREST(w, cliCtx, req.BaseReq, []sdk.Msg{msg}, cdc) } } diff --git a/x/distribution/client/rest/query.go b/x/distribution/client/rest/query.go index 2c70e34fc6..954a097fdc 100644 --- a/x/distribution/client/rest/query.go +++ b/x/distribution/client/rest/query.go @@ -4,16 +4,16 @@ import ( "fmt" "net/http" + "github.com/gorilla/mux" + "github.com/cosmos/cosmos-sdk/x/distribution" "github.com/cosmos/cosmos-sdk/x/distribution/client/common" "github.com/cosmos/cosmos-sdk/x/distribution/types" - "github.com/gorilla/mux" - "github.com/cosmos/cosmos-sdk/client/context" - "github.com/cosmos/cosmos-sdk/client/rest" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/rest" ) func registerQueryRoutes(cliCtx context.CLIContext, r *mux.Router, diff --git a/x/distribution/client/rest/tx.go b/x/distribution/client/rest/tx.go index 8e5bff39f3..b5607be80f 100644 --- a/x/distribution/client/rest/tx.go +++ b/x/distribution/client/rest/tx.go @@ -3,16 +3,16 @@ package rest import ( "net/http" - "github.com/cosmos/cosmos-sdk/client/rest" - "github.com/gorilla/mux" "github.com/cosmos/cosmos-sdk/client/context" + clientrest "github.com/cosmos/cosmos-sdk/client/rest" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/x/distribution/client/common" "github.com/cosmos/cosmos-sdk/x/distribution/types" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/rest" ) func registerTxRoutes(cliCtx context.CLIContext, r *mux.Router, @@ -82,11 +82,11 @@ func withdrawDelegatorRewardsHandlerFn(cdc *codec.Codec, cliCtx context.CLIConte } if req.BaseReq.GenerateOnly { - rest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, msgs) + clientrest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, msgs) return } - rest.CompleteAndBroadcastTxREST(w, r, cliCtx, req.BaseReq, msgs, cdc) + clientrest.CompleteAndBroadcastTxREST(w, cliCtx, req.BaseReq, msgs, cdc) } } @@ -122,11 +122,11 @@ func withdrawDelegationRewardsHandlerFn(cdc *codec.Codec, cliCtx context.CLICont } if req.BaseReq.GenerateOnly { - rest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, []sdk.Msg{msg}) + clientrest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, []sdk.Msg{msg}) return } - rest.CompleteAndBroadcastTxREST(w, r, cliCtx, req.BaseReq, []sdk.Msg{msg}, cdc) + clientrest.CompleteAndBroadcastTxREST(w, cliCtx, req.BaseReq, []sdk.Msg{msg}, cdc) } } @@ -157,11 +157,11 @@ func setDelegatorWithdrawalAddrHandlerFn(cdc *codec.Codec, cliCtx context.CLICon } if req.BaseReq.GenerateOnly { - rest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, []sdk.Msg{msg}) + clientrest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, []sdk.Msg{msg}) return } - rest.CompleteAndBroadcastTxREST(w, r, cliCtx, req.BaseReq, []sdk.Msg{msg}, cdc) + clientrest.CompleteAndBroadcastTxREST(w, cliCtx, req.BaseReq, []sdk.Msg{msg}, cdc) } } @@ -193,11 +193,11 @@ func withdrawValidatorRewardsHandlerFn(cdc *codec.Codec, cliCtx context.CLIConte } if req.BaseReq.GenerateOnly { - rest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, msgs) + clientrest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, msgs) return } - rest.CompleteAndBroadcastTxREST(w, r, cliCtx, req.BaseReq, msgs, cdc) + clientrest.CompleteAndBroadcastTxREST(w, cliCtx, req.BaseReq, msgs, cdc) } } diff --git a/x/gov/client/rest/rest.go b/x/gov/client/rest/rest.go index d530054052..48d1fe782b 100644 --- a/x/gov/client/rest/rest.go +++ b/x/gov/client/rest/rest.go @@ -1,21 +1,19 @@ package rest import ( + "errors" "fmt" "net/http" - "github.com/cosmos/cosmos-sdk/client/rest" - - "github.com/cosmos/cosmos-sdk/client/context" - "github.com/cosmos/cosmos-sdk/codec" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/gov" - gcutils "github.com/cosmos/cosmos-sdk/x/gov/client/utils" - - "errors" - "github.com/gorilla/mux" + "github.com/cosmos/cosmos-sdk/client/context" + clientrest "github.com/cosmos/cosmos-sdk/client/rest" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/rest" + "github.com/cosmos/cosmos-sdk/x/gov" + gcutils "github.com/cosmos/cosmos-sdk/x/gov/client/utils" govClientUtils "github.com/cosmos/cosmos-sdk/x/gov/client/utils" ) @@ -54,7 +52,8 @@ func RegisterRoutes(cliCtx context.CLIContext, r *mux.Router, cdc *codec.Codec) r.HandleFunc(fmt.Sprintf("/gov/proposals/{%s}/votes/{%s}", RestProposalID, RestVoter), queryVoteHandlerFn(cdc, cliCtx)).Methods("GET") } -type postProposalReq struct { +// PostProposalReq defines the properties of a proposal request's body. +type PostProposalReq struct { BaseReq rest.BaseReq `json:"base_req"` Title string `json:"title"` // Title of the proposal Description string `json:"description"` // Description of the proposal @@ -63,13 +62,15 @@ type postProposalReq struct { InitialDeposit sdk.Coins `json:"initial_deposit"` // Coins to add to the proposal's deposit } -type depositReq struct { +// DepositReq defines the properties of a deposit request's body. +type DepositReq struct { BaseReq rest.BaseReq `json:"base_req"` Depositor sdk.AccAddress `json:"depositor"` // Address of the depositor Amount sdk.Coins `json:"amount"` // Coins to add to the proposal's deposit } -type voteReq struct { +// VoteReq defines the properties of a vote request's body. +type VoteReq struct { BaseReq rest.BaseReq `json:"base_req"` Voter sdk.AccAddress `json:"voter"` // address of the voter Option string `json:"option"` // option from OptionSet chosen by the voter @@ -77,7 +78,7 @@ type voteReq struct { func postProposalHandlerFn(cdc *codec.Codec, cliCtx context.CLIContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - var req postProposalReq + var req PostProposalReq if !rest.ReadRESTReq(w, r, cdc, &req) { return } @@ -101,11 +102,11 @@ func postProposalHandlerFn(cdc *codec.Codec, cliCtx context.CLIContext) http.Han } if req.BaseReq.GenerateOnly { - rest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, []sdk.Msg{msg}) + clientrest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, []sdk.Msg{msg}) return } - rest.CompleteAndBroadcastTxREST(w, r, cliCtx, req.BaseReq, []sdk.Msg{msg}, cdc) + clientrest.CompleteAndBroadcastTxREST(w, cliCtx, req.BaseReq, []sdk.Msg{msg}, cdc) } } @@ -125,7 +126,7 @@ func depositHandlerFn(cdc *codec.Codec, cliCtx context.CLIContext) http.HandlerF return } - var req depositReq + var req DepositReq if !rest.ReadRESTReq(w, r, cdc, &req) { return } @@ -143,11 +144,11 @@ func depositHandlerFn(cdc *codec.Codec, cliCtx context.CLIContext) http.HandlerF } if req.BaseReq.GenerateOnly { - rest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, []sdk.Msg{msg}) + clientrest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, []sdk.Msg{msg}) return } - rest.CompleteAndBroadcastTxREST(w, r, cliCtx, req.BaseReq, []sdk.Msg{msg}, cdc) + clientrest.CompleteAndBroadcastTxREST(w, cliCtx, req.BaseReq, []sdk.Msg{msg}, cdc) } } @@ -167,7 +168,7 @@ func voteHandlerFn(cdc *codec.Codec, cliCtx context.CLIContext) http.HandlerFunc return } - var req voteReq + var req VoteReq if !rest.ReadRESTReq(w, r, cdc, &req) { return } @@ -191,11 +192,11 @@ func voteHandlerFn(cdc *codec.Codec, cliCtx context.CLIContext) http.HandlerFunc } if req.BaseReq.GenerateOnly { - rest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, []sdk.Msg{msg}) + clientrest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, []sdk.Msg{msg}) return } - rest.CompleteAndBroadcastTxREST(w, r, cliCtx, req.BaseReq, []sdk.Msg{msg}, cdc) + clientrest.CompleteAndBroadcastTxREST(w, cliCtx, req.BaseReq, []sdk.Msg{msg}, cdc) } } diff --git a/x/ibc/client/rest/transfer.go b/x/ibc/client/rest/transfer.go index f3ca528dce..e0a228bb58 100644 --- a/x/ibc/client/rest/transfer.go +++ b/x/ibc/client/rest/transfer.go @@ -3,12 +3,12 @@ package rest import ( "net/http" - "github.com/cosmos/cosmos-sdk/client/rest" - "github.com/cosmos/cosmos-sdk/client/context" + clientrest "github.com/cosmos/cosmos-sdk/client/rest" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/crypto/keys" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/rest" "github.com/cosmos/cosmos-sdk/x/ibc" "github.com/gorilla/mux" @@ -66,10 +66,10 @@ func TransferRequestHandlerFn(cdc *codec.Codec, kb keys.Keybase, cliCtx context. msg := ibc.IBCTransferMsg{IBCPacket: packet} if req.BaseReq.GenerateOnly { - rest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, []sdk.Msg{msg}) + clientrest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, []sdk.Msg{msg}) return } - rest.CompleteAndBroadcastTxREST(w, r, cliCtx, req.BaseReq, []sdk.Msg{msg}, cdc) + clientrest.CompleteAndBroadcastTxREST(w, cliCtx, req.BaseReq, []sdk.Msg{msg}, cdc) } } diff --git a/x/slashing/client/rest/query.go b/x/slashing/client/rest/query.go index 812e9527f5..2f037e5fba 100644 --- a/x/slashing/client/rest/query.go +++ b/x/slashing/client/rest/query.go @@ -4,13 +4,12 @@ import ( "fmt" "net/http" - "github.com/cosmos/cosmos-sdk/client/rest" - "github.com/gorilla/mux" "github.com/cosmos/cosmos-sdk/client/context" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/rest" "github.com/cosmos/cosmos-sdk/x/slashing" ) diff --git a/x/slashing/client/rest/rest.go b/x/slashing/client/rest/rest.go index 507fcb517f..d06cd719df 100644 --- a/x/slashing/client/rest/rest.go +++ b/x/slashing/client/rest/rest.go @@ -1,11 +1,11 @@ package rest import ( + "github.com/gorilla/mux" + "github.com/cosmos/cosmos-sdk/client/context" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/crypto/keys" - - "github.com/gorilla/mux" ) // RegisterRoutes registers staking-related REST handlers to a router diff --git a/x/slashing/client/rest/tx.go b/x/slashing/client/rest/tx.go index 609da021c4..8233543f75 100644 --- a/x/slashing/client/rest/tx.go +++ b/x/slashing/client/rest/tx.go @@ -4,15 +4,15 @@ import ( "bytes" "net/http" - "github.com/cosmos/cosmos-sdk/client/rest" + "github.com/gorilla/mux" "github.com/cosmos/cosmos-sdk/client/context" + clientrest "github.com/cosmos/cosmos-sdk/client/rest" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/crypto/keys" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/rest" "github.com/cosmos/cosmos-sdk/x/slashing" - - "github.com/gorilla/mux" ) func registerTxRoutes(cliCtx context.CLIContext, r *mux.Router, cdc *codec.Codec, kb keys.Keybase) { @@ -57,7 +57,7 @@ func unjailRequestHandlerFn(cdc *codec.Codec, kb keys.Keybase, cliCtx context.CL } if req.BaseReq.GenerateOnly { - rest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, []sdk.Msg{msg}) + clientrest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, []sdk.Msg{msg}) return } @@ -75,6 +75,6 @@ func unjailRequestHandlerFn(cdc *codec.Codec, kb keys.Keybase, cliCtx context.CL return } - rest.CompleteAndBroadcastTxREST(w, r, cliCtx, req.BaseReq, []sdk.Msg{msg}, cdc) + clientrest.CompleteAndBroadcastTxREST(w, cliCtx, req.BaseReq, []sdk.Msg{msg}, cdc) } } diff --git a/x/staking/client/rest/query.go b/x/staking/client/rest/query.go index 88e625194a..8a5a5be3ce 100644 --- a/x/staking/client/rest/query.go +++ b/x/staking/client/rest/query.go @@ -4,11 +4,10 @@ import ( "net/http" "strings" - "github.com/cosmos/cosmos-sdk/client/rest" - "github.com/cosmos/cosmos-sdk/client/context" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/rest" "github.com/cosmos/cosmos-sdk/x/staking" "github.com/cosmos/cosmos-sdk/x/staking/tags" diff --git a/x/staking/client/rest/tx.go b/x/staking/client/rest/tx.go index 6258d7a7e1..b7a4173518 100644 --- a/x/staking/client/rest/tx.go +++ b/x/staking/client/rest/tx.go @@ -4,15 +4,15 @@ import ( "bytes" "net/http" - "github.com/cosmos/cosmos-sdk/client/rest" + "github.com/gorilla/mux" "github.com/cosmos/cosmos-sdk/client/context" + clientrest "github.com/cosmos/cosmos-sdk/client/rest" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/crypto/keys" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/rest" "github.com/cosmos/cosmos-sdk/x/staking" - - "github.com/gorilla/mux" ) func registerTxRoutes(cliCtx context.CLIContext, r *mux.Router, cdc *codec.Codec, kb keys.Keybase) { @@ -31,14 +31,16 @@ func registerTxRoutes(cliCtx context.CLIContext, r *mux.Router, cdc *codec.Codec } type ( - msgDelegationsInput struct { + // MsgBeginRedelegateInput defines the properties of a delegation request's body. + MsgDelegationsInput struct { BaseReq rest.BaseReq `json:"base_req"` DelegatorAddr sdk.AccAddress `json:"delegator_addr"` // in bech32 ValidatorAddr sdk.ValAddress `json:"validator_addr"` // in bech32 Delegation sdk.Coin `json:"delegation"` } - msgBeginRedelegateInput struct { + // MsgBeginRedelegateInput defines the properties of a redelegate request's body. + MsgBeginRedelegateInput struct { BaseReq rest.BaseReq `json:"base_req"` DelegatorAddr sdk.AccAddress `json:"delegator_addr"` // in bech32 ValidatorSrcAddr sdk.ValAddress `json:"validator_src_addr"` // in bech32 @@ -46,7 +48,8 @@ type ( SharesAmount sdk.Dec `json:"shares"` } - msgUndelegateInput struct { + // MsgUndelegateInput defines the properties of a undelegate request's body. + MsgUndelegateInput struct { BaseReq rest.BaseReq `json:"base_req"` DelegatorAddr sdk.AccAddress `json:"delegator_addr"` // in bech32 ValidatorAddr sdk.ValAddress `json:"validator_addr"` // in bech32 @@ -56,7 +59,7 @@ type ( func postDelegationsHandlerFn(cdc *codec.Codec, kb keys.Keybase, cliCtx context.CLIContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - var req msgDelegationsInput + var req MsgDelegationsInput if !rest.ReadRESTReq(w, r, cdc, &req) { return @@ -74,7 +77,7 @@ func postDelegationsHandlerFn(cdc *codec.Codec, kb keys.Keybase, cliCtx context. } if req.BaseReq.GenerateOnly { - rest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, []sdk.Msg{msg}) + clientrest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, []sdk.Msg{msg}) return } @@ -92,13 +95,13 @@ func postDelegationsHandlerFn(cdc *codec.Codec, kb keys.Keybase, cliCtx context. return } - rest.CompleteAndBroadcastTxREST(w, r, cliCtx, req.BaseReq, []sdk.Msg{msg}, cdc) + clientrest.CompleteAndBroadcastTxREST(w, cliCtx, req.BaseReq, []sdk.Msg{msg}, cdc) } } func postRedelegationsHandlerFn(cdc *codec.Codec, kb keys.Keybase, cliCtx context.CLIContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - var req msgBeginRedelegateInput + var req MsgBeginRedelegateInput if !rest.ReadRESTReq(w, r, cdc, &req) { return @@ -116,7 +119,7 @@ func postRedelegationsHandlerFn(cdc *codec.Codec, kb keys.Keybase, cliCtx contex } if req.BaseReq.GenerateOnly { - rest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, []sdk.Msg{msg}) + clientrest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, []sdk.Msg{msg}) return } @@ -134,13 +137,13 @@ func postRedelegationsHandlerFn(cdc *codec.Codec, kb keys.Keybase, cliCtx contex return } - rest.CompleteAndBroadcastTxREST(w, r, cliCtx, req.BaseReq, []sdk.Msg{msg}, cdc) + clientrest.CompleteAndBroadcastTxREST(w, cliCtx, req.BaseReq, []sdk.Msg{msg}, cdc) } } func postUnbondingDelegationsHandlerFn(cdc *codec.Codec, kb keys.Keybase, cliCtx context.CLIContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - var req msgUndelegateInput + var req MsgUndelegateInput if !rest.ReadRESTReq(w, r, cdc, &req) { return @@ -158,7 +161,7 @@ func postUnbondingDelegationsHandlerFn(cdc *codec.Codec, kb keys.Keybase, cliCtx } if req.BaseReq.GenerateOnly { - rest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, []sdk.Msg{msg}) + clientrest.WriteGenerateStdTxResponse(w, cdc, cliCtx, req.BaseReq, []sdk.Msg{msg}) return } @@ -176,6 +179,6 @@ func postUnbondingDelegationsHandlerFn(cdc *codec.Codec, kb keys.Keybase, cliCtx return } - rest.CompleteAndBroadcastTxREST(w, r, cliCtx, req.BaseReq, []sdk.Msg{msg}, cdc) + clientrest.CompleteAndBroadcastTxREST(w, cliCtx, req.BaseReq, []sdk.Msg{msg}, cdc) } } diff --git a/x/staking/client/rest/utils.go b/x/staking/client/rest/utils.go index 3efd05d54a..dd34dd053e 100644 --- a/x/staking/client/rest/utils.go +++ b/x/staking/client/rest/utils.go @@ -4,18 +4,17 @@ import ( "fmt" "net/http" - "github.com/cosmos/cosmos-sdk/client/rest" - "github.com/gorilla/mux" + rpcclient "github.com/tendermint/tendermint/rpc/client" + "github.com/cosmos/cosmos-sdk/client/context" "github.com/cosmos/cosmos-sdk/client/tx" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/rest" "github.com/cosmos/cosmos-sdk/x/staking" "github.com/cosmos/cosmos-sdk/x/staking/tags" - - rpcclient "github.com/tendermint/tendermint/rpc/client" ) // contains checks if the a given query contains one of the tx types From 26c13b28cdade6beb7a73ca37cb980643fba84e2 Mon Sep 17 00:00:00 2001 From: Alexander Bezobchuk <alexanderbez@users.noreply.github.com> Date: Fri, 15 Feb 2019 10:33:23 -0500 Subject: [PATCH 15/20] Merge PR #3607: Reconcile DecCoin/s API with Coin/s API --- PENDING.md | 2 + baseapp/baseapp_test.go | 2 +- server/config/config_test.go | 2 +- types/coin.go | 59 +++-- types/coin_test.go | 271 +++++++++++------------ types/context_test.go | 2 +- types/dec_coin.go | 227 ++++++++++++++++--- types/dec_coin_test.go | 89 ++++---- x/bank/msgs.go | 6 +- x/bank/msgs_test.go | 14 -- x/distribution/keeper/delegation.go | 3 +- x/distribution/keeper/delegation_test.go | 43 ++-- x/distribution/keeper/keeper_test.go | 23 +- x/distribution/simulation/invariants.go | 2 +- x/distribution/types/fee_pool.go | 2 +- 15 files changed, 456 insertions(+), 291 deletions(-) diff --git a/PENDING.md b/PENDING.md index f023471dec..e82bc08818 100644 --- a/PENDING.md +++ b/PENDING.md @@ -40,6 +40,8 @@ IMPROVEMENTS * Gaia * SDK + * [\#3311] Reconcile the `DecCoin/s` API with the `Coin/s` API. + * [\#3614] Add coin denom length checks to the coins constructors. * \#3621 remove many inter-module dependancies * [\#3601] JSON-stringify the ABCI log response which includes the log and message index. diff --git a/baseapp/baseapp_test.go b/baseapp/baseapp_test.go index 7e64c114e6..c1fca6f919 100644 --- a/baseapp/baseapp_test.go +++ b/baseapp/baseapp_test.go @@ -256,7 +256,7 @@ func TestBaseAppOptionSeal(t *testing.T) { } func TestSetMinGasPrices(t *testing.T) { - minGasPrices := sdk.DecCoins{sdk.NewDecCoin("stake", 5000)} + minGasPrices := sdk.DecCoins{sdk.NewInt64DecCoin("stake", 5000)} app := newBaseApp(t.Name(), SetMinGasPrices(minGasPrices.String())) require.Equal(t, minGasPrices, app.minGasPrices) } diff --git a/server/config/config_test.go b/server/config/config_test.go index c2f8832756..e828a0716d 100644 --- a/server/config/config_test.go +++ b/server/config/config_test.go @@ -15,6 +15,6 @@ func TestDefaultConfig(t *testing.T) { func TestSetMinimumFees(t *testing.T) { cfg := DefaultConfig() - cfg.SetMinGasPrices(sdk.DecCoins{sdk.NewDecCoin("foo", 5)}) + cfg.SetMinGasPrices(sdk.DecCoins{sdk.NewInt64DecCoin("foo", 5)}) require.Equal(t, "5.000000000000000000foo", cfg.MinGasPrices) } diff --git a/types/coin.go b/types/coin.go index 675ddbb290..f969d2c434 100644 --- a/types/coin.go +++ b/types/coin.go @@ -27,12 +27,11 @@ type Coin struct { // NewCoin returns a new coin with a denomination and amount. It will panic if // the amount is negative. func NewCoin(denom string, amount Int) Coin { + validateDenom(denom) + if amount.LT(ZeroInt()) { panic(fmt.Sprintf("negative coin amount: %v\n", amount)) } - if strings.ToLower(denom) != denom { - panic(fmt.Sprintf("denom cannot contain upper case characters: %s\n", denom)) - } return Coin{ Denom: denom, @@ -51,11 +50,6 @@ func (coin Coin) String() string { return fmt.Sprintf("%v%v", coin.Amount, coin.Denom) } -// SameDenomAs returns true if the two coins are the same denom -func (coin Coin) SameDenomAs(other Coin) bool { - return (coin.Denom == other.Denom) -} - // IsZero returns if this represents no money func (coin Coin) IsZero() bool { return coin.Amount.IsZero() @@ -64,24 +58,36 @@ func (coin Coin) IsZero() bool { // IsGTE returns true if they are the same type and the receiver is // an equal or greater value func (coin Coin) IsGTE(other Coin) bool { - return coin.SameDenomAs(other) && (!coin.Amount.LT(other.Amount)) + if coin.Denom != other.Denom { + panic(fmt.Sprintf("invalid coin denominations; %s, %s", coin.Denom, other.Denom)) + } + + return !coin.Amount.LT(other.Amount) } // IsLT returns true if they are the same type and the receiver is // a smaller value func (coin Coin) IsLT(other Coin) bool { - return coin.SameDenomAs(other) && coin.Amount.LT(other.Amount) + if coin.Denom != other.Denom { + panic(fmt.Sprintf("invalid coin denominations; %s, %s", coin.Denom, other.Denom)) + } + + return coin.Amount.LT(other.Amount) } // IsEqual returns true if the two sets of Coins have the same value func (coin Coin) IsEqual(other Coin) bool { - return coin.SameDenomAs(other) && (coin.Amount.Equal(other.Amount)) + if coin.Denom != other.Denom { + panic(fmt.Sprintf("invalid coin denominations; %s, %s", coin.Denom, other.Denom)) + } + + return coin.Amount.Equal(other.Amount) } // Adds amounts of two coins with same denom. If the coins differ in denom then // it panics. func (coin Coin) Plus(coinB Coin) Coin { - if !coin.SameDenomAs(coinB) { + if coin.Denom != coinB.Denom { panic(fmt.Sprintf("invalid coin denominations; %s, %s", coin.Denom, coinB.Denom)) } @@ -91,7 +97,7 @@ func (coin Coin) Plus(coinB Coin) Coin { // Subtracts amounts of two coins with same denom. If the coins differ in denom // then it panics. func (coin Coin) Minus(coinB Coin) Coin { - if !coin.SameDenomAs(coinB) { + if coin.Denom != coinB.Denom { panic(fmt.Sprintf("invalid coin denominations; %s, %s", coin.Denom, coinB.Denom)) } @@ -273,7 +279,7 @@ func (coins Coins) IsAllGT(coinsB Coins) bool { return false } - return diff.IsPositive() + return diff.IsAllPositive() } // IsAllGTE returns true iff for every denom in coins, the denom is present at @@ -339,7 +345,7 @@ func (coins Coins) IsEqual(coinsB Coins) bool { coinsB = coinsB.Sort() for i := 0; i < len(coins); i++ { - if coins[i].Denom != coinsB[i].Denom || !coins[i].Amount.Equal(coinsB[i].Amount) { + if !coins[i].IsEqual(coinsB[i]) { return false } } @@ -354,9 +360,8 @@ func (coins Coins) Empty() bool { // Returns the amount of a denom from coins func (coins Coins) AmountOf(denom string) Int { - if strings.ToLower(denom) != denom { - panic(fmt.Sprintf("denom cannot contain upper case characters: %s\n", denom)) - } + validateDenom(denom) + switch len(coins) { case 0: return ZeroInt() @@ -382,11 +387,11 @@ func (coins Coins) AmountOf(denom string) Int { } } -// IsPositive returns true if there is at least one coin and all currencies +// IsAllPositive returns true if there is at least one coin and all currencies // have a positive value. // // TODO: Remove once unsigned integers are used. -func (coins Coins) IsPositive() bool { +func (coins Coins) IsAllPositive() bool { if len(coins) == 0 { return false } @@ -403,12 +408,9 @@ func (coins Coins) IsPositive() bool { // IsAnyNegative returns true if there is at least one coin whose amount // is negative; returns false otherwise. It returns false if the coin set // is empty too. +// // TODO: Remove once unsigned integers are used. func (coins Coins) IsAnyNegative() bool { - if len(coins) == 0 { - return false - } - for _, coin := range coins { if coin.IsNegative() { return true @@ -485,6 +487,15 @@ var ( reDecCoin = regexp.MustCompile(fmt.Sprintf(`^(%s)%s(%s)$`, reDecAmt, reSpc, reDnm)) ) +func validateDenom(denom string) { + if len(denom) < 3 || len(denom) > 16 { + panic(fmt.Sprintf("invalid denom length: %s", denom)) + } + if strings.ToLower(denom) != denom { + panic(fmt.Sprintf("denom cannot contain upper case characters: %s", denom)) + } +} + // ParseCoin parses a cli input for one coin type, returning errors if invalid. // This returns an error on an empty string as well. func ParseCoin(coinStr string) (coin Coin, err error) { diff --git a/types/coin_test.go b/types/coin_test.go index 277c29c46b..3bbc497f68 100644 --- a/types/coin_test.go +++ b/types/coin_test.go @@ -1,39 +1,28 @@ package types import ( + "strings" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) +var ( + testDenom1 = "atom" + testDenom2 = "muon" +) + // ---------------------------------------------------------------------------- // Coin tests func TestCoin(t *testing.T) { - require.Panics(t, func() { NewInt64Coin("a", -1) }) - require.Panics(t, func() { NewCoin("a", NewInt(-1)) }) - require.Panics(t, func() { NewInt64Coin("Atom", 10) }) - require.Panics(t, func() { NewCoin("Atom", NewInt(10)) }) - require.Equal(t, NewInt(5), NewInt64Coin("a", 5).Amount) - require.Equal(t, NewInt(5), NewCoin("a", NewInt(5)).Amount) -} - -func TestSameDenomAsCoin(t *testing.T) { - cases := []struct { - inputOne Coin - inputTwo Coin - expected bool - }{ - {NewInt64Coin("a", 1), NewInt64Coin("a", 1), true}, - {NewInt64Coin("a", 1), NewInt64Coin("b", 1), false}, - {NewInt64Coin("steak", 1), NewInt64Coin("steak", 10), true}, - } - - for tcIndex, tc := range cases { - res := tc.inputOne.SameDenomAs(tc.inputTwo) - require.Equal(t, tc.expected, res, "coin denominations didn't match, tc #%d", tcIndex) - } + require.Panics(t, func() { NewInt64Coin(testDenom1, -1) }) + require.Panics(t, func() { NewCoin(testDenom1, NewInt(-1)) }) + require.Panics(t, func() { NewInt64Coin(strings.ToUpper(testDenom1), 10) }) + require.Panics(t, func() { NewCoin(strings.ToUpper(testDenom1), NewInt(10)) }) + require.Equal(t, NewInt(5), NewInt64Coin(testDenom1, 5).Amount) + require.Equal(t, NewInt(5), NewCoin(testDenom1, NewInt(5)).Amount) } func TestIsEqualCoin(t *testing.T) { @@ -41,15 +30,20 @@ func TestIsEqualCoin(t *testing.T) { inputOne Coin inputTwo Coin expected bool + panics bool }{ - {NewInt64Coin("a", 1), NewInt64Coin("a", 1), true}, - {NewInt64Coin("a", 1), NewInt64Coin("b", 1), false}, - {NewInt64Coin("steak", 1), NewInt64Coin("steak", 10), false}, + {NewInt64Coin(testDenom1, 1), NewInt64Coin(testDenom1, 1), true, false}, + {NewInt64Coin(testDenom1, 1), NewInt64Coin(testDenom2, 1), false, true}, + {NewInt64Coin("steak", 1), NewInt64Coin("steak", 10), false, false}, } for tcIndex, tc := range cases { - res := tc.inputOne.IsEqual(tc.inputTwo) - require.Equal(t, tc.expected, res, "coin equality relation is incorrect, tc #%d", tcIndex) + if tc.panics { + require.Panics(t, func() { tc.inputOne.IsEqual(tc.inputTwo) }) + } else { + res := tc.inputOne.IsEqual(tc.inputTwo) + require.Equal(t, tc.expected, res, "coin equality relation is incorrect, tc #%d", tcIndex) + } } } @@ -60,9 +54,9 @@ func TestPlusCoin(t *testing.T) { expected Coin shouldPanic bool }{ - {NewInt64Coin("a", 1), NewInt64Coin("a", 1), NewInt64Coin("a", 2), false}, - {NewInt64Coin("a", 1), NewInt64Coin("a", 0), NewInt64Coin("a", 1), false}, - {NewInt64Coin("a", 1), NewInt64Coin("b", 1), NewInt64Coin("a", 1), true}, + {NewInt64Coin(testDenom1, 1), NewInt64Coin(testDenom1, 1), NewInt64Coin(testDenom1, 2), false}, + {NewInt64Coin(testDenom1, 1), NewInt64Coin(testDenom1, 0), NewInt64Coin(testDenom1, 1), false}, + {NewInt64Coin(testDenom1, 1), NewInt64Coin(testDenom2, 1), NewInt64Coin(testDenom1, 1), true}, } for tcIndex, tc := range cases { @@ -82,11 +76,11 @@ func TestMinusCoin(t *testing.T) { expected Coin shouldPanic bool }{ - {NewInt64Coin("a", 1), NewInt64Coin("b", 1), NewInt64Coin("a", 1), true}, - {NewInt64Coin("a", 10), NewInt64Coin("a", 1), NewInt64Coin("a", 9), false}, - {NewInt64Coin("a", 5), NewInt64Coin("a", 3), NewInt64Coin("a", 2), false}, - {NewInt64Coin("a", 5), NewInt64Coin("a", 0), NewInt64Coin("a", 5), false}, - {NewInt64Coin("a", 1), NewInt64Coin("a", 5), Coin{}, true}, + {NewInt64Coin(testDenom1, 1), NewInt64Coin(testDenom2, 1), NewInt64Coin(testDenom1, 1), true}, + {NewInt64Coin(testDenom1, 10), NewInt64Coin(testDenom1, 1), NewInt64Coin(testDenom1, 9), false}, + {NewInt64Coin(testDenom1, 5), NewInt64Coin(testDenom1, 3), NewInt64Coin(testDenom1, 2), false}, + {NewInt64Coin(testDenom1, 5), NewInt64Coin(testDenom1, 0), NewInt64Coin(testDenom1, 5), false}, + {NewInt64Coin(testDenom1, 1), NewInt64Coin(testDenom1, 5), Coin{}, true}, } for tcIndex, tc := range cases { @@ -102,7 +96,7 @@ func TestMinusCoin(t *testing.T) { inputOne Coin inputTwo Coin expected int64 - }{NewInt64Coin("a", 1), NewInt64Coin("a", 1), 0} + }{NewInt64Coin(testDenom1, 1), NewInt64Coin(testDenom1, 1), 0} res := tc.inputOne.Minus(tc.inputTwo) require.Equal(t, tc.expected, res.Amount.Int64()) } @@ -112,15 +106,20 @@ func TestIsGTECoin(t *testing.T) { inputOne Coin inputTwo Coin expected bool + panics bool }{ - {NewInt64Coin("a", 1), NewInt64Coin("a", 1), true}, - {NewInt64Coin("a", 2), NewInt64Coin("a", 1), true}, - {NewInt64Coin("a", 1), NewInt64Coin("b", 1), false}, + {NewInt64Coin(testDenom1, 1), NewInt64Coin(testDenom1, 1), true, false}, + {NewInt64Coin(testDenom1, 2), NewInt64Coin(testDenom1, 1), true, false}, + {NewInt64Coin(testDenom1, 1), NewInt64Coin(testDenom2, 1), false, true}, } for tcIndex, tc := range cases { - res := tc.inputOne.IsGTE(tc.inputTwo) - require.Equal(t, tc.expected, res, "coin GTE relation is incorrect, tc #%d", tcIndex) + if tc.panics { + require.Panics(t, func() { tc.inputOne.IsGTE(tc.inputTwo) }) + } else { + res := tc.inputOne.IsGTE(tc.inputTwo) + require.Equal(t, tc.expected, res, "coin GTE relation is incorrect, tc #%d", tcIndex) + } } } @@ -129,27 +128,32 @@ func TestIsLTCoin(t *testing.T) { inputOne Coin inputTwo Coin expected bool + panics bool }{ - {NewInt64Coin("a", 1), NewInt64Coin("a", 1), false}, - {NewInt64Coin("a", 2), NewInt64Coin("a", 1), false}, - {NewInt64Coin("a", 0), NewInt64Coin("b", 1), false}, - {NewInt64Coin("a", 1), NewInt64Coin("b", 1), false}, - {NewInt64Coin("a", 1), NewInt64Coin("a", 1), false}, - {NewInt64Coin("a", 1), NewInt64Coin("a", 2), true}, + {NewInt64Coin(testDenom1, 1), NewInt64Coin(testDenom1, 1), false, false}, + {NewInt64Coin(testDenom1, 2), NewInt64Coin(testDenom1, 1), false, false}, + {NewInt64Coin(testDenom1, 0), NewInt64Coin(testDenom2, 1), false, true}, + {NewInt64Coin(testDenom1, 1), NewInt64Coin(testDenom2, 1), false, true}, + {NewInt64Coin(testDenom1, 1), NewInt64Coin(testDenom1, 1), false, false}, + {NewInt64Coin(testDenom1, 1), NewInt64Coin(testDenom1, 2), true, false}, } for tcIndex, tc := range cases { - res := tc.inputOne.IsLT(tc.inputTwo) - require.Equal(t, tc.expected, res, "coin LT relation is incorrect, tc #%d", tcIndex) + if tc.panics { + require.Panics(t, func() { tc.inputOne.IsLT(tc.inputTwo) }) + } else { + res := tc.inputOne.IsLT(tc.inputTwo) + require.Equal(t, tc.expected, res, "coin LT relation is incorrect, tc #%d", tcIndex) + } } } func TestCoinIsZero(t *testing.T) { - coin := NewInt64Coin("a", 0) + coin := NewInt64Coin(testDenom1, 0) res := coin.IsZero() require.True(t, res) - coin = NewInt64Coin("a", 1) + coin = NewInt64Coin(testDenom1, 1) res = coin.IsZero() require.False(t, res) } @@ -163,10 +167,10 @@ func TestIsZeroCoins(t *testing.T) { expected bool }{ {Coins{}, true}, - {Coins{NewInt64Coin("a", 0)}, true}, - {Coins{NewInt64Coin("a", 0), NewInt64Coin("b", 0)}, true}, - {Coins{NewInt64Coin("a", 1)}, false}, - {Coins{NewInt64Coin("a", 0), NewInt64Coin("b", 1)}, false}, + {Coins{NewInt64Coin(testDenom1, 0)}, true}, + {Coins{NewInt64Coin(testDenom1, 0), NewInt64Coin(testDenom2, 0)}, true}, + {Coins{NewInt64Coin(testDenom1, 1)}, false}, + {Coins{NewInt64Coin(testDenom1, 0), NewInt64Coin(testDenom2, 1)}, false}, } for _, tc := range cases { @@ -180,19 +184,24 @@ func TestEqualCoins(t *testing.T) { inputOne Coins inputTwo Coins expected bool + panics bool }{ - {Coins{}, Coins{}, true}, - {Coins{NewInt64Coin("a", 0)}, Coins{NewInt64Coin("a", 0)}, true}, - {Coins{NewInt64Coin("a", 0), NewInt64Coin("b", 1)}, Coins{NewInt64Coin("a", 0), NewInt64Coin("b", 1)}, true}, - {Coins{NewInt64Coin("a", 0)}, Coins{NewInt64Coin("b", 0)}, false}, - {Coins{NewInt64Coin("a", 0)}, Coins{NewInt64Coin("a", 1)}, false}, - {Coins{NewInt64Coin("a", 0)}, Coins{NewInt64Coin("a", 0), NewInt64Coin("b", 1)}, false}, - {Coins{NewInt64Coin("a", 0), NewInt64Coin("b", 1)}, Coins{NewInt64Coin("b", 1), NewInt64Coin("a", 0)}, true}, + {Coins{}, Coins{}, true, false}, + {Coins{NewInt64Coin(testDenom1, 0)}, Coins{NewInt64Coin(testDenom1, 0)}, true, false}, + {Coins{NewInt64Coin(testDenom1, 0), NewInt64Coin(testDenom2, 1)}, Coins{NewInt64Coin(testDenom1, 0), NewInt64Coin(testDenom2, 1)}, true, false}, + {Coins{NewInt64Coin(testDenom1, 0)}, Coins{NewInt64Coin(testDenom2, 0)}, false, true}, + {Coins{NewInt64Coin(testDenom1, 0)}, Coins{NewInt64Coin(testDenom1, 1)}, false, false}, + {Coins{NewInt64Coin(testDenom1, 0)}, Coins{NewInt64Coin(testDenom1, 0), NewInt64Coin(testDenom2, 1)}, false, false}, + {Coins{NewInt64Coin(testDenom1, 0), NewInt64Coin(testDenom2, 1)}, Coins{NewInt64Coin(testDenom1, 0), NewInt64Coin(testDenom2, 1)}, true, false}, } for tcnum, tc := range cases { - res := tc.inputOne.IsEqual(tc.inputTwo) - require.Equal(t, tc.expected, res, "Equality is differed from expected. tc #%d, expected %b, actual %b.", tcnum, tc.expected, res) + if tc.panics { + require.Panics(t, func() { tc.inputOne.IsEqual(tc.inputTwo) }) + } else { + res := tc.inputOne.IsEqual(tc.inputTwo) + require.Equal(t, tc.expected, res, "Equality is differed from expected. tc #%d, expected %b, actual %b.", tcnum, tc.expected, res) + } } } @@ -206,11 +215,11 @@ func TestPlusCoins(t *testing.T) { inputTwo Coins expected Coins }{ - {Coins{{"a", one}, {"b", one}}, Coins{{"a", one}, {"b", one}}, Coins{{"a", two}, {"b", two}}}, - {Coins{{"a", zero}, {"b", one}}, Coins{{"a", zero}, {"b", zero}}, Coins{{"b", one}}}, - {Coins{{"a", two}}, Coins{{"b", zero}}, Coins{{"a", two}}}, - {Coins{{"a", one}}, Coins{{"a", one}, {"b", two}}, Coins{{"a", two}, {"b", two}}}, - {Coins{{"a", zero}, {"b", zero}}, Coins{{"a", zero}, {"b", zero}}, Coins(nil)}, + {Coins{{testDenom1, one}, {testDenom2, one}}, Coins{{testDenom1, one}, {testDenom2, one}}, Coins{{testDenom1, two}, {testDenom2, two}}}, + {Coins{{testDenom1, zero}, {testDenom2, one}}, Coins{{testDenom1, zero}, {testDenom2, zero}}, Coins{{testDenom2, one}}}, + {Coins{{testDenom1, two}}, Coins{{testDenom2, zero}}, Coins{{testDenom1, two}}}, + {Coins{{testDenom1, one}}, Coins{{testDenom1, one}, {testDenom2, two}}, Coins{{testDenom1, two}, {testDenom2, two}}}, + {Coins{{testDenom1, zero}, {testDenom2, zero}}, Coins{{testDenom1, zero}, {testDenom2, zero}}, Coins(nil)}, } for tcIndex, tc := range cases { @@ -231,11 +240,11 @@ func TestMinusCoins(t *testing.T) { expected Coins shouldPanic bool }{ - {Coins{{"a", two}}, Coins{{"a", one}, {"b", two}}, Coins{{"a", one}, {"b", two}}, true}, - {Coins{{"a", two}}, Coins{{"b", zero}}, Coins{{"a", two}}, false}, - {Coins{{"a", one}}, Coins{{"b", zero}}, Coins{{"a", one}}, false}, - {Coins{{"a", one}, {"b", one}}, Coins{{"a", one}}, Coins{{"b", one}}, false}, - {Coins{{"a", one}, {"b", one}}, Coins{{"a", two}}, Coins{}, true}, + {Coins{{testDenom1, two}}, Coins{{testDenom1, one}, {testDenom2, two}}, Coins{{testDenom1, one}, {testDenom2, two}}, true}, + {Coins{{testDenom1, two}}, Coins{{testDenom2, zero}}, Coins{{testDenom1, two}}, false}, + {Coins{{testDenom1, one}}, Coins{{testDenom2, zero}}, Coins{{testDenom1, one}}, false}, + {Coins{{testDenom1, one}, {testDenom2, one}}, Coins{{testDenom1, one}}, Coins{{testDenom2, one}}, false}, + {Coins{{testDenom1, one}, {testDenom2, one}}, Coins{{testDenom1, two}}, Coins{}, true}, } for i, tc := range testCases { @@ -302,8 +311,8 @@ func TestCoins(t *testing.T) { assert.False(t, mixedCase1.IsValid(), "Coins denoms contain upper case characters") assert.False(t, mixedCase2.IsValid(), "First Coins denoms contain upper case characters") assert.False(t, mixedCase3.IsValid(), "Single denom in Coins contains upper case characters") - assert.True(t, good.IsPositive(), "Expected coins to be positive: %v", good) - assert.False(t, null.IsPositive(), "Expected coins to not be positive: %v", null) + assert.True(t, good.IsAllPositive(), "Expected coins to be positive: %v", good) + assert.False(t, null.IsAllPositive(), "Expected coins to not be positive: %v", null) assert.True(t, good.IsAllGTE(empty), "Expected %v to be >= %v", good, empty) assert.False(t, good.IsAllLT(empty), "Expected %v to be < %v", good, empty) assert.True(t, empty.IsAllLT(good), "Expected %v to be < %v", empty, good) @@ -319,11 +328,11 @@ func TestCoinsGT(t *testing.T) { two := NewInt(2) assert.False(t, Coins{}.IsAllGT(Coins{})) - assert.True(t, Coins{{"a", one}}.IsAllGT(Coins{})) - assert.False(t, Coins{{"a", one}}.IsAllGT(Coins{{"a", one}})) - assert.False(t, Coins{{"a", one}}.IsAllGT(Coins{{"b", one}})) - assert.True(t, Coins{{"a", one}, {"b", one}}.IsAllGT(Coins{{"b", one}})) - assert.False(t, Coins{{"a", one}, {"b", one}}.IsAllGT(Coins{{"b", two}})) + assert.True(t, Coins{{testDenom1, one}}.IsAllGT(Coins{})) + assert.False(t, Coins{{testDenom1, one}}.IsAllGT(Coins{{testDenom1, one}})) + assert.False(t, Coins{{testDenom1, one}}.IsAllGT(Coins{{testDenom2, one}})) + assert.True(t, Coins{{testDenom1, one}, {testDenom2, one}}.IsAllGT(Coins{{testDenom2, one}})) + assert.False(t, Coins{{testDenom1, one}, {testDenom2, one}}.IsAllGT(Coins{{testDenom2, two}})) } func TestCoinsGTE(t *testing.T) { @@ -331,11 +340,11 @@ func TestCoinsGTE(t *testing.T) { two := NewInt(2) assert.True(t, Coins{}.IsAllGTE(Coins{})) - assert.True(t, Coins{{"a", one}}.IsAllGTE(Coins{})) - assert.True(t, Coins{{"a", one}}.IsAllGTE(Coins{{"a", one}})) - assert.False(t, Coins{{"a", one}}.IsAllGTE(Coins{{"b", one}})) - assert.True(t, Coins{{"a", one}, {"b", one}}.IsAllGTE(Coins{{"b", one}})) - assert.False(t, Coins{{"a", one}, {"b", one}}.IsAllGTE(Coins{{"b", two}})) + assert.True(t, Coins{{testDenom1, one}}.IsAllGTE(Coins{})) + assert.True(t, Coins{{testDenom1, one}}.IsAllGTE(Coins{{testDenom1, one}})) + assert.False(t, Coins{{testDenom1, one}}.IsAllGTE(Coins{{testDenom2, one}})) + assert.True(t, Coins{{testDenom1, one}, {testDenom2, one}}.IsAllGTE(Coins{{testDenom2, one}})) + assert.False(t, Coins{{testDenom1, one}, {testDenom2, one}}.IsAllGTE(Coins{{testDenom2, two}})) } func TestCoinsLT(t *testing.T) { @@ -343,14 +352,14 @@ func TestCoinsLT(t *testing.T) { two := NewInt(2) assert.False(t, Coins{}.IsAllLT(Coins{})) - assert.False(t, Coins{{"a", one}}.IsAllLT(Coins{})) - assert.False(t, Coins{{"a", one}}.IsAllLT(Coins{{"a", one}})) - assert.False(t, Coins{{"a", one}}.IsAllLT(Coins{{"b", one}})) - assert.False(t, Coins{{"a", one}, {"b", one}}.IsAllLT(Coins{{"b", one}})) - assert.False(t, Coins{{"a", one}, {"b", one}}.IsAllLT(Coins{{"b", two}})) - assert.False(t, Coins{{"a", one}, {"b", one}}.IsAllLT(Coins{{"a", one}, {"b", one}})) - assert.True(t, Coins{{"a", one}, {"b", one}}.IsAllLT(Coins{{"a", one}, {"b", two}})) - assert.True(t, Coins{}.IsAllLT(Coins{{"a", one}})) + assert.False(t, Coins{{testDenom1, one}}.IsAllLT(Coins{})) + assert.False(t, Coins{{testDenom1, one}}.IsAllLT(Coins{{testDenom1, one}})) + assert.False(t, Coins{{testDenom1, one}}.IsAllLT(Coins{{testDenom2, one}})) + assert.False(t, Coins{{testDenom1, one}, {testDenom2, one}}.IsAllLT(Coins{{testDenom2, one}})) + assert.False(t, Coins{{testDenom1, one}, {testDenom2, one}}.IsAllLT(Coins{{testDenom2, two}})) + assert.False(t, Coins{{testDenom1, one}, {testDenom2, one}}.IsAllLT(Coins{{testDenom1, one}, {testDenom2, one}})) + assert.True(t, Coins{{testDenom1, one}, {testDenom2, one}}.IsAllLT(Coins{{testDenom1, one}, {testDenom2, two}})) + assert.True(t, Coins{}.IsAllLT(Coins{{testDenom1, one}})) } func TestCoinsLTE(t *testing.T) { @@ -358,14 +367,14 @@ func TestCoinsLTE(t *testing.T) { two := NewInt(2) assert.True(t, Coins{}.IsAllLTE(Coins{})) - assert.False(t, Coins{{"a", one}}.IsAllLTE(Coins{})) - assert.True(t, Coins{{"a", one}}.IsAllLTE(Coins{{"a", one}})) - assert.False(t, Coins{{"a", one}}.IsAllLTE(Coins{{"b", one}})) - assert.False(t, Coins{{"a", one}, {"b", one}}.IsAllLTE(Coins{{"b", one}})) - assert.False(t, Coins{{"a", one}, {"b", one}}.IsAllLTE(Coins{{"b", two}})) - assert.True(t, Coins{{"a", one}, {"b", one}}.IsAllLTE(Coins{{"a", one}, {"b", one}})) - assert.True(t, Coins{{"a", one}, {"b", one}}.IsAllLTE(Coins{{"a", one}, {"b", two}})) - assert.True(t, Coins{}.IsAllLTE(Coins{{"a", one}})) + assert.False(t, Coins{{testDenom1, one}}.IsAllLTE(Coins{})) + assert.True(t, Coins{{testDenom1, one}}.IsAllLTE(Coins{{testDenom1, one}})) + assert.False(t, Coins{{testDenom1, one}}.IsAllLTE(Coins{{testDenom2, one}})) + assert.False(t, Coins{{testDenom1, one}, {testDenom2, one}}.IsAllLTE(Coins{{testDenom2, one}})) + assert.False(t, Coins{{testDenom1, one}, {testDenom2, one}}.IsAllLTE(Coins{{testDenom2, two}})) + assert.True(t, Coins{{testDenom1, one}, {testDenom2, one}}.IsAllLTE(Coins{{testDenom1, one}, {testDenom2, one}})) + assert.True(t, Coins{{testDenom1, one}, {testDenom2, one}}.IsAllLTE(Coins{{testDenom1, one}, {testDenom2, two}})) + assert.True(t, Coins{}.IsAllLTE(Coins{{testDenom1, one}})) } func TestParse(t *testing.T) { @@ -452,30 +461,18 @@ func TestSortCoins(t *testing.T) { func TestAmountOf(t *testing.T) { case0 := Coins{} case1 := Coins{ - NewInt64Coin("", 0), - } - case2 := Coins{ - NewInt64Coin(" ", 0), - } - case3 := Coins{ NewInt64Coin("gold", 0), } - case4 := Coins{ + case2 := Coins{ NewInt64Coin("gas", 1), NewInt64Coin("mineral", 1), NewInt64Coin("tree", 1), } - case5 := Coins{ + case3 := Coins{ NewInt64Coin("mineral", 1), NewInt64Coin("tree", 1), } - case6 := Coins{ - NewInt64Coin("", 6), - } - case7 := Coins{ - NewInt64Coin(" ", 7), - } - case8 := Coins{ + case4 := Coins{ NewInt64Coin("gas", 8), } @@ -489,18 +486,12 @@ func TestAmountOf(t *testing.T) { }{ {case0, 0, 0, 0, 0, 0}, {case1, 0, 0, 0, 0, 0}, - {case2, 0, 0, 0, 0, 0}, - {case3, 0, 0, 0, 0, 0}, - {case4, 0, 0, 1, 1, 1}, - {case5, 0, 0, 0, 1, 1}, - {case6, 6, 0, 0, 0, 0}, - {case7, 0, 7, 0, 0, 0}, - {case8, 0, 0, 8, 0, 0}, + {case2, 0, 0, 1, 1, 1}, + {case3, 0, 0, 0, 1, 1}, + {case4, 0, 0, 8, 0, 0}, } for _, tc := range cases { - assert.Equal(t, NewInt(tc.amountOf), tc.coins.AmountOf("")) - assert.Equal(t, NewInt(tc.amountOfSpace), tc.coins.AmountOf(" ")) assert.Equal(t, NewInt(tc.amountOfGAS), tc.coins.AmountOf("gas")) assert.Equal(t, NewInt(tc.amountOfMINERAL), tc.coins.AmountOf("mineral")) assert.Equal(t, NewInt(tc.amountOfTREE), tc.coins.AmountOf("tree")) @@ -514,17 +505,17 @@ func TestCoinsIsAnyGTE(t *testing.T) { two := NewInt(2) assert.False(t, Coins{}.IsAnyGTE(Coins{})) - assert.False(t, Coins{{"a", one}}.IsAnyGTE(Coins{})) - assert.False(t, Coins{}.IsAnyGTE(Coins{{"a", one}})) - assert.False(t, Coins{{"a", one}}.IsAnyGTE(Coins{{"a", two}})) - assert.False(t, Coins{{"a", one}}.IsAnyGTE(Coins{{"b", one}})) - assert.True(t, Coins{{"a", one}, {"b", two}}.IsAnyGTE(Coins{{"a", two}, {"b", one}})) - assert.True(t, Coins{{"a", one}}.IsAnyGTE(Coins{{"a", one}})) - assert.True(t, Coins{{"a", two}}.IsAnyGTE(Coins{{"a", one}})) - assert.True(t, Coins{{"a", one}}.IsAnyGTE(Coins{{"a", one}, {"b", two}})) - assert.True(t, Coins{{"b", two}}.IsAnyGTE(Coins{{"a", one}, {"b", two}})) - assert.False(t, Coins{{"b", one}}.IsAnyGTE(Coins{{"a", one}, {"b", two}})) - assert.True(t, Coins{{"a", one}, {"b", two}}.IsAnyGTE(Coins{{"a", one}, {"b", one}})) - assert.True(t, Coins{{"a", one}, {"b", one}}.IsAnyGTE(Coins{{"a", one}, {"b", two}})) - assert.True(t, Coins{{"x", one}, {"y", one}}.IsAnyGTE(Coins{{"b", one}, {"c", one}, {"y", one}, {"z", one}})) + assert.False(t, Coins{{testDenom1, one}}.IsAnyGTE(Coins{})) + assert.False(t, Coins{}.IsAnyGTE(Coins{{testDenom1, one}})) + assert.False(t, Coins{{testDenom1, one}}.IsAnyGTE(Coins{{testDenom1, two}})) + assert.False(t, Coins{{testDenom1, one}}.IsAnyGTE(Coins{{testDenom2, one}})) + assert.True(t, Coins{{testDenom1, one}, {testDenom2, two}}.IsAnyGTE(Coins{{testDenom1, two}, {testDenom2, one}})) + assert.True(t, Coins{{testDenom1, one}}.IsAnyGTE(Coins{{testDenom1, one}})) + assert.True(t, Coins{{testDenom1, two}}.IsAnyGTE(Coins{{testDenom1, one}})) + assert.True(t, Coins{{testDenom1, one}}.IsAnyGTE(Coins{{testDenom1, one}, {testDenom2, two}})) + assert.True(t, Coins{{testDenom2, two}}.IsAnyGTE(Coins{{testDenom1, one}, {testDenom2, two}})) + assert.False(t, Coins{{testDenom2, one}}.IsAnyGTE(Coins{{testDenom1, one}, {testDenom2, two}})) + assert.True(t, Coins{{testDenom1, one}, {testDenom2, two}}.IsAnyGTE(Coins{{testDenom1, one}, {testDenom2, one}})) + assert.True(t, Coins{{testDenom1, one}, {testDenom2, one}}.IsAnyGTE(Coins{{testDenom1, one}, {testDenom2, two}})) + assert.True(t, Coins{{"xxx", one}, {"yyy", one}}.IsAnyGTE(Coins{{testDenom2, one}, {"ccc", one}, {"yyy", one}, {"zzz", one}})) } diff --git a/types/context_test.go b/types/context_test.go index 7edaa6e202..56f951584e 100644 --- a/types/context_test.go +++ b/types/context_test.go @@ -163,7 +163,7 @@ func TestContextWithCustom(t *testing.T) { logger := NewMockLogger() voteinfos := []abci.VoteInfo{{}} meter := types.NewGasMeter(10000) - minGasPrices := types.DecCoins{types.NewDecCoin("feetoken", 1)} + minGasPrices := types.DecCoins{types.NewInt64DecCoin("feetoken", 1)} ctx = types.NewContext(nil, header, ischeck, logger) require.Equal(t, header, ctx.BlockHeader()) diff --git a/types/dec_coin.go b/types/dec_coin.go index e3222ae320..9634b85360 100644 --- a/types/dec_coin.go +++ b/types/dec_coin.go @@ -18,27 +18,25 @@ type DecCoin struct { Amount Dec `json:"amount"` } -func NewDecCoin(denom string, amount int64) DecCoin { - if amount < 0 { - panic(fmt.Sprintf("negative decimal coin amount: %v\n", amount)) - } - if strings.ToLower(denom) != denom { - panic(fmt.Sprintf("denom cannot contain upper case characters: %s\n", denom)) +func NewDecCoin(denom string, amount Int) DecCoin { + validateDenom(denom) + + if amount.LT(ZeroInt()) { + panic(fmt.Sprintf("negative coin amount: %v\n", amount)) } return DecCoin{ Denom: denom, - Amount: NewDec(amount), + Amount: NewDecFromInt(amount), } } func NewDecCoinFromDec(denom string, amount Dec) DecCoin { + validateDenom(denom) + if amount.LT(ZeroDec()) { panic(fmt.Sprintf("negative decimal coin amount: %v\n", amount)) } - if strings.ToLower(denom) != denom { - panic(fmt.Sprintf("denom cannot contain upper case characters: %s\n", denom)) - } return DecCoin{ Denom: denom, @@ -60,6 +58,46 @@ func NewDecCoinFromCoin(coin Coin) DecCoin { } } +// NewInt64DecCoin returns a new DecCoin with a denomination and amount. It will +// panic if the amount is negative or denom is invalid. +func NewInt64DecCoin(denom string, amount int64) DecCoin { + return NewDecCoin(denom, NewInt(amount)) +} + +// IsZero returns if the DecCoin amount is zero. +func (coin DecCoin) IsZero() bool { + return coin.Amount.IsZero() +} + +// IsGTE returns true if they are the same type and the receiver is +// an equal or greater value. +func (coin DecCoin) IsGTE(other DecCoin) bool { + if coin.Denom != other.Denom { + panic(fmt.Sprintf("invalid coin denominations; %s, %s", coin.Denom, other.Denom)) + } + + return !coin.Amount.LT(other.Amount) +} + +// IsLT returns true if they are the same type and the receiver is +// a smaller value. +func (coin DecCoin) IsLT(other DecCoin) bool { + if coin.Denom != other.Denom { + panic(fmt.Sprintf("invalid coin denominations; %s, %s", coin.Denom, other.Denom)) + } + + return coin.Amount.LT(other.Amount) +} + +// IsEqual returns true if the two sets of Coins have the same value. +func (coin DecCoin) IsEqual(other DecCoin) bool { + if coin.Denom != other.Denom { + panic(fmt.Sprintf("invalid coin denominations; %s, %s", coin.Denom, other.Denom)) + } + + return coin.Amount.Equal(other.Amount) +} + // Adds amounts of two coins with same denom func (coin DecCoin) Plus(coinB DecCoin) DecCoin { if coin.Denom != coinB.Denom { @@ -90,6 +128,13 @@ func (coin DecCoin) IsPositive() bool { return coin.Amount.IsPositive() } +// IsNegative returns true if the coin amount is negative and false otherwise. +// +// TODO: Remove once unsigned integers are used. +func (coin DecCoin) IsNegative() bool { + return coin.Amount.Sign() == -1 +} + // String implements the Stringer interface for DecCoin. It returns a // human-readable representation of a decimal coin. func (coin DecCoin) String() string { @@ -125,55 +170,87 @@ func (coins DecCoins) String() string { return out[:len(out)-1] } -// return the coins with trunctated decimals, and return the change +// TruncateDecimal returns the coins with truncated decimals and returns the +// change. func (coins DecCoins) TruncateDecimal() (Coins, DecCoins) { changeSum := DecCoins{} out := make(Coins, len(coins)) + for i, coin := range coins { truncated, change := coin.TruncateDecimal() out[i] = truncated changeSum = changeSum.Plus(DecCoins{change}) } + return out, changeSum } -// Plus combines two sets of coins -// CONTRACT: Plus will never return Coins where one Coin has a 0 amount. +// Plus adds two sets of DecCoins. +// +// NOTE: Plus operates under the invariant that coins are sorted by +// denominations. +// +// CONTRACT: Plus will never return Coins where one Coin has a non-positive +// amount. In otherwords, IsValid will always return true. func (coins DecCoins) Plus(coinsB DecCoins) DecCoins { + return coins.safePlus(coinsB) +} + +// safePlus will perform addition of two DecCoins sets. If both coin sets are +// empty, then an empty set is returned. If only a single set is empty, the +// other set is returned. Otherwise, the coins are compared in order of their +// denomination and addition only occurs when the denominations match, otherwise +// the coin is simply added to the sum assuming it's not zero. +func (coins DecCoins) safePlus(coinsB DecCoins) DecCoins { sum := ([]DecCoin)(nil) indexA, indexB := 0, 0 lenA, lenB := len(coins), len(coinsB) + for { if indexA == lenA { if indexB == lenB { + // return nil coins if both sets are empty return sum } - return append(sum, coinsB[indexB:]...) + + // return set B (excluding zero coins) if set A is empty + return append(sum, removeZeroDecCoins(coinsB[indexB:])...) } else if indexB == lenB { - return append(sum, coins[indexA:]...) + // return set A (excluding zero coins) if set B is empty + return append(sum, removeZeroDecCoins(coins[indexA:])...) } + coinA, coinB := coins[indexA], coinsB[indexB] + switch strings.Compare(coinA.Denom, coinB.Denom) { - case -1: - sum = append(sum, coinA) - indexA++ - case 0: - if coinA.Amount.Add(coinB.Amount).IsZero() { - // ignore 0 sum coin type - } else { - sum = append(sum, coinA.Plus(coinB)) + case -1: // coin A denom < coin B denom + if !coinA.IsZero() { + sum = append(sum, coinA) } + + indexA++ + + case 0: // coin A denom == coin B denom + res := coinA.Plus(coinB) + if !res.IsZero() { + sum = append(sum, res) + } + indexA++ indexB++ - case 1: - sum = append(sum, coinB) + + case 1: // coin A denom > coin B denom + if !coinB.IsZero() { + sum = append(sum, coinB) + } + indexB++ } } } -// Negative returns a set of coins with all amount negative -func (coins DecCoins) Negative() DecCoins { +// negative returns a set of coins with all amount negative. +func (coins DecCoins) negative() DecCoins { res := make([]DecCoin, 0, len(coins)) for _, coin := range coins { res = append(res, DecCoin{ @@ -184,9 +261,36 @@ func (coins DecCoins) Negative() DecCoins { return res } -// Minus subtracts a set of coins from another (adds the inverse) +// Minus subtracts a set of DecCoins from another (adds the inverse). func (coins DecCoins) Minus(coinsB DecCoins) DecCoins { - return coins.Plus(coinsB.Negative()) + diff, hasNeg := coins.SafeMinus(coinsB) + if hasNeg { + panic("negative coin amount") + } + + return diff +} + +// SafeMinus performs the same arithmetic as Minus but returns a boolean if any +// negative coin amount was returned. +func (coins DecCoins) SafeMinus(coinsB DecCoins) (DecCoins, bool) { + diff := coins.safePlus(coinsB.negative()) + return diff, diff.IsAnyNegative() +} + +// IsAnyNegative returns true if there is at least one coin whose amount +// is negative; returns false otherwise. It returns false if the DecCoins set +// is empty too. +// +// TODO: Remove once unsigned integers are used. +func (coins DecCoins) IsAnyNegative() bool { + for _, coin := range coins { + if coin.IsNegative() { + return true + } + } + + return false } // multiply all the coins by a decimal @@ -241,20 +345,30 @@ func (coins DecCoins) QuoDecTruncate(d Dec) DecCoins { return res } +// Empty returns true if there are no coins and false otherwise. +func (coins DecCoins) Empty() bool { + return len(coins) == 0 +} + // returns the amount of a denom from deccoins func (coins DecCoins) AmountOf(denom string) Dec { + validateDenom(denom) + switch len(coins) { case 0: return ZeroDec() + case 1: coin := coins[0] if coin.Denom == denom { return coin.Amount } return ZeroDec() + default: - midIdx := len(coins) / 2 // binary search + midIdx := len(coins) / 2 // 2:1, 3:1, 4:2 coin := coins[midIdx] + if denom < coin.Denom { return coins[:midIdx].AmountOf(denom) } else if denom == coin.Denom { @@ -265,14 +379,22 @@ func (coins DecCoins) AmountOf(denom string) Dec { } } -// has a negative DecCoin amount -func (coins DecCoins) HasNegative() bool { - for _, coin := range coins { - if coin.Amount.IsNegative() { - return true +// IsEqual returns true if the two sets of DecCoins have the same value. +func (coins DecCoins) IsEqual(coinsB DecCoins) bool { + if len(coins) != len(coinsB) { + return false + } + + coins = coins.Sort() + coinsB = coinsB.Sort() + + for i := 0; i < len(coins); i++ { + if !coins[i].IsEqual(coinsB[i]) { + return false } } - return false + + return true } // return whether all coins are zero @@ -324,6 +446,39 @@ func (coins DecCoins) IsValid() bool { } } +// IsAllPositive returns true if there is at least one coin and all currencies +// have a positive value. +// +// TODO: Remove once unsigned integers are used. +func (coins DecCoins) IsAllPositive() bool { + if len(coins) == 0 { + return false + } + + for _, coin := range coins { + if !coin.IsPositive() { + return false + } + } + + return true +} + +func removeZeroDecCoins(coins DecCoins) DecCoins { + i, l := 0, len(coins) + for i < l { + if coins[i].IsZero() { + // remove coin + coins = append(coins[:i], coins[i+1:]...) + l-- + } else { + i++ + } + } + + return coins[:i] +} + //----------------------------------------------------------------------------- // Sorting diff --git a/types/dec_coin_test.go b/types/dec_coin_test.go index b2502ced1d..ba7f49add1 100644 --- a/types/dec_coin_test.go +++ b/types/dec_coin_test.go @@ -1,6 +1,7 @@ package types import ( + "strings" "testing" "github.com/stretchr/testify/require" @@ -8,61 +9,61 @@ import ( func TestNewDecCoin(t *testing.T) { require.NotPanics(t, func() { - NewDecCoin("a", 5) + NewInt64DecCoin(testDenom1, 5) }) require.NotPanics(t, func() { - NewDecCoin("a", 0) + NewInt64DecCoin(testDenom1, 0) }) require.Panics(t, func() { - NewDecCoin("A", 5) + NewInt64DecCoin(strings.ToUpper(testDenom1), 5) }) require.Panics(t, func() { - NewDecCoin("a", -5) + NewInt64DecCoin(testDenom1, -5) }) } func TestNewDecCoinFromDec(t *testing.T) { require.NotPanics(t, func() { - NewDecCoinFromDec("a", NewDec(5)) + NewDecCoinFromDec(testDenom1, NewDec(5)) }) require.NotPanics(t, func() { - NewDecCoinFromDec("a", ZeroDec()) + NewDecCoinFromDec(testDenom1, ZeroDec()) }) require.Panics(t, func() { - NewDecCoinFromDec("A", NewDec(5)) + NewDecCoinFromDec(strings.ToUpper(testDenom1), NewDec(5)) }) require.Panics(t, func() { - NewDecCoinFromDec("a", NewDec(-5)) + NewDecCoinFromDec(testDenom1, NewDec(-5)) }) } func TestNewDecCoinFromCoin(t *testing.T) { require.NotPanics(t, func() { - NewDecCoinFromCoin(Coin{"a", NewInt(5)}) + NewDecCoinFromCoin(Coin{testDenom1, NewInt(5)}) }) require.NotPanics(t, func() { - NewDecCoinFromCoin(Coin{"a", NewInt(0)}) + NewDecCoinFromCoin(Coin{testDenom1, NewInt(0)}) }) require.Panics(t, func() { - NewDecCoinFromCoin(Coin{"A", NewInt(5)}) + NewDecCoinFromCoin(Coin{strings.ToUpper(testDenom1), NewInt(5)}) }) require.Panics(t, func() { - NewDecCoinFromCoin(Coin{"a", NewInt(-5)}) + NewDecCoinFromCoin(Coin{testDenom1, NewInt(-5)}) }) } func TestDecCoinIsPositive(t *testing.T) { - dc := NewDecCoin("a", 5) + dc := NewInt64DecCoin(testDenom1, 5) require.True(t, dc.IsPositive()) - dc = NewDecCoin("a", 0) + dc = NewInt64DecCoin(testDenom1, 0) require.False(t, dc.IsPositive()) } func TestPlusDecCoin(t *testing.T) { - decCoinA1 := NewDecCoinFromDec("a", NewDecWithPrec(11, 1)) - decCoinA2 := NewDecCoinFromDec("a", NewDecWithPrec(22, 1)) - decCoinB1 := NewDecCoinFromDec("b", NewDecWithPrec(11, 1)) + decCoinA1 := NewDecCoinFromDec(testDenom1, NewDecWithPrec(11, 1)) + decCoinA2 := NewDecCoinFromDec(testDenom1, NewDecWithPrec(22, 1)) + decCoinB1 := NewDecCoinFromDec(testDenom2, NewDecWithPrec(11, 1)) // regular add res := decCoinA1.Plus(decCoinA1) @@ -84,9 +85,9 @@ func TestPlusDecCoins(t *testing.T) { inputTwo DecCoins expected DecCoins }{ - {DecCoins{{"a", one}, {"b", one}}, DecCoins{{"a", one}, {"b", one}}, DecCoins{{"a", two}, {"b", two}}}, - {DecCoins{{"a", zero}, {"b", one}}, DecCoins{{"a", zero}, {"b", zero}}, DecCoins{{"b", one}}}, - {DecCoins{{"a", zero}, {"b", zero}}, DecCoins{{"a", zero}, {"b", zero}}, DecCoins(nil)}, + {DecCoins{{testDenom1, one}, {testDenom2, one}}, DecCoins{{testDenom1, one}, {testDenom2, one}}, DecCoins{{testDenom1, two}, {testDenom2, two}}}, + {DecCoins{{testDenom1, zero}, {testDenom2, one}}, DecCoins{{testDenom1, zero}, {testDenom2, zero}}, DecCoins{{testDenom2, one}}}, + {DecCoins{{testDenom1, zero}, {testDenom2, zero}}, DecCoins{{testDenom1, zero}, {testDenom2, zero}}, DecCoins(nil)}, } for tcIndex, tc := range cases { @@ -97,32 +98,32 @@ func TestPlusDecCoins(t *testing.T) { func TestSortDecCoins(t *testing.T) { good := DecCoins{ - NewDecCoin("gas", 1), - NewDecCoin("mineral", 1), - NewDecCoin("tree", 1), + NewInt64DecCoin("gas", 1), + NewInt64DecCoin("mineral", 1), + NewInt64DecCoin("tree", 1), } empty := DecCoins{ - NewDecCoin("gold", 0), + NewInt64DecCoin("gold", 0), } badSort1 := DecCoins{ - NewDecCoin("tree", 1), - NewDecCoin("gas", 1), - NewDecCoin("mineral", 1), + NewInt64DecCoin("tree", 1), + NewInt64DecCoin("gas", 1), + NewInt64DecCoin("mineral", 1), } badSort2 := DecCoins{ // both are after the first one, but the second and third are in the wrong order - NewDecCoin("gas", 1), - NewDecCoin("tree", 1), - NewDecCoin("mineral", 1), + NewInt64DecCoin("gas", 1), + NewInt64DecCoin("tree", 1), + NewInt64DecCoin("mineral", 1), } badAmt := DecCoins{ - NewDecCoin("gas", 1), - NewDecCoin("tree", 0), - NewDecCoin("mineral", 1), + NewInt64DecCoin("gas", 1), + NewInt64DecCoin("tree", 0), + NewInt64DecCoin("mineral", 1), } dup := DecCoins{ - NewDecCoin("gas", 1), - NewDecCoin("gas", 1), - NewDecCoin("mineral", 1), + NewInt64DecCoin("gas", 1), + NewInt64DecCoin("gas", 1), + NewInt64DecCoin("mineral", 1), } cases := []struct { @@ -150,14 +151,14 @@ func TestDecCoinsIsValid(t *testing.T) { expected bool }{ {DecCoins{}, true}, - {DecCoins{DecCoin{"a", NewDec(5)}}, true}, - {DecCoins{DecCoin{"a", NewDec(5)}, DecCoin{"b", NewDec(100000)}}, true}, - {DecCoins{DecCoin{"a", NewDec(-5)}}, false}, - {DecCoins{DecCoin{"A", NewDec(5)}}, false}, - {DecCoins{DecCoin{"a", NewDec(5)}, DecCoin{"B", NewDec(100000)}}, false}, - {DecCoins{DecCoin{"a", NewDec(5)}, DecCoin{"b", NewDec(-100000)}}, false}, - {DecCoins{DecCoin{"a", NewDec(-5)}, DecCoin{"b", NewDec(100000)}}, false}, - {DecCoins{DecCoin{"A", NewDec(5)}, DecCoin{"b", NewDec(100000)}}, false}, + {DecCoins{DecCoin{testDenom1, NewDec(5)}}, true}, + {DecCoins{DecCoin{testDenom1, NewDec(5)}, DecCoin{testDenom2, NewDec(100000)}}, true}, + {DecCoins{DecCoin{testDenom1, NewDec(-5)}}, false}, + {DecCoins{DecCoin{"AAA", NewDec(5)}}, false}, + {DecCoins{DecCoin{testDenom1, NewDec(5)}, DecCoin{"B", NewDec(100000)}}, false}, + {DecCoins{DecCoin{testDenom1, NewDec(5)}, DecCoin{testDenom2, NewDec(-100000)}}, false}, + {DecCoins{DecCoin{testDenom1, NewDec(-5)}, DecCoin{testDenom2, NewDec(100000)}}, false}, + {DecCoins{DecCoin{"AAA", NewDec(5)}, DecCoin{testDenom2, NewDec(100000)}}, false}, } for i, tc := range testCases { diff --git a/x/bank/msgs.go b/x/bank/msgs.go index 8b3ee2cb44..11479ff733 100644 --- a/x/bank/msgs.go +++ b/x/bank/msgs.go @@ -35,7 +35,7 @@ func (msg MsgSend) ValidateBasic() sdk.Error { if msg.ToAddress.Empty() { return sdk.ErrInvalidAddress("missing recipient address") } - if !msg.Amount.IsPositive() { + if !msg.Amount.IsAllPositive() { return sdk.ErrInsufficientCoins("send amount must be positive") } return nil @@ -112,7 +112,7 @@ func (in Input) ValidateBasic() sdk.Error { if !in.Coins.IsValid() { return sdk.ErrInvalidCoins(in.Coins.String()) } - if !in.Coins.IsPositive() { + if !in.Coins.IsAllPositive() { return sdk.ErrInvalidCoins(in.Coins.String()) } return nil @@ -140,7 +140,7 @@ func (out Output) ValidateBasic() sdk.Error { if !out.Coins.IsValid() { return sdk.ErrInvalidCoins(out.Coins.String()) } - if !out.Coins.IsPositive() { + if !out.Coins.IsAllPositive() { return sdk.ErrInvalidCoins(out.Coins.String()) } return nil diff --git a/x/bank/msgs_test.go b/x/bank/msgs_test.go index fbc42ddc2a..b065dc9cc0 100644 --- a/x/bank/msgs_test.go +++ b/x/bank/msgs_test.go @@ -172,7 +172,6 @@ func TestMsgMultiSendValidation(t *testing.T) { input2 := NewInput(addr1, eth123) output1 := NewOutput(addr2, atom123) output2 := NewOutput(addr2, atom124) - output3 := NewOutput(addr2, eth123) outputMulti := NewOutput(addr2, atom123eth123) var emptyAddr sdk.AccAddress @@ -195,19 +194,6 @@ func TestMsgMultiSendValidation(t *testing.T) { Inputs: []Input{input1}, Outputs: []Output{output2}}, // amounts dont match }, - {false, MsgMultiSend{ - Inputs: []Input{input1}, - Outputs: []Output{output3}}, // amounts dont match - }, - {false, MsgMultiSend{ - Inputs: []Input{input1}, - Outputs: []Output{outputMulti}}, // amounts dont match - }, - {false, MsgMultiSend{ - Inputs: []Input{input2}, - Outputs: []Output{output1}}, // amounts dont match - }, - {true, MsgMultiSend{ Inputs: []Input{input1}, Outputs: []Output{output1}}, diff --git a/x/distribution/keeper/delegation.go b/x/distribution/keeper/delegation.go index d75691bdf5..6738deb924 100644 --- a/x/distribution/keeper/delegation.go +++ b/x/distribution/keeper/delegation.go @@ -41,7 +41,7 @@ func (k Keeper) calculateDelegationRewardsBetween(ctx sdk.Context, val sdk.Valid starting := k.GetValidatorHistoricalRewards(ctx, val.GetOperator(), startingPeriod) ending := k.GetValidatorHistoricalRewards(ctx, val.GetOperator(), endingPeriod) difference := ending.CumulativeRewardRatio.Minus(starting.CumulativeRewardRatio) - if difference.HasNegative() { + if difference.IsAnyNegative() { panic("negative rewards should not be possible") } // note: necessary to truncate so we don't allow withdrawing more rewards than owed @@ -100,6 +100,7 @@ func (k Keeper) withdrawDelegationRewards(ctx sdk.Context, val sdk.Validator, de // truncate coins, return remainder to community pool coins, remainder := rewards.TruncateDecimal() outstanding := k.GetOutstandingRewards(ctx) + k.SetOutstandingRewards(ctx, outstanding.Minus(rewards)) feePool := k.GetFeePool(ctx) feePool.CommunityPool = feePool.CommunityPool.Plus(remainder) diff --git a/x/distribution/keeper/delegation_test.go b/x/distribution/keeper/delegation_test.go index a34960b1c5..5286a141f1 100644 --- a/x/distribution/keeper/delegation_test.go +++ b/x/distribution/keeper/delegation_test.go @@ -270,28 +270,31 @@ func TestWithdrawDelegationRewardsBasic(t *testing.T) { power := int64(100) valTokens := sdk.TokensFromTendermintPower(power) commission := staking.NewCommissionMsg(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) - msg := staking.NewMsgCreateValidator(valOpAddr1, valConsPk1, - sdk.NewCoin(sdk.DefaultBondDenom, valTokens), staking.Description{}, commission, sdk.OneInt()) + msg := staking.NewMsgCreateValidator( + valOpAddr1, valConsPk1, + sdk.NewCoin(sdk.DefaultBondDenom, valTokens), + staking.Description{}, commission, sdk.OneInt(), + ) require.True(t, sh(ctx, msg).IsOK()) // assert correct initial balance expTokens := balanceTokens.Sub(valTokens) require.Equal(t, - sdk.Coins{{sdk.DefaultBondDenom, expTokens}}, - ak.GetAccount(ctx, sdk.AccAddress(valOpAddr1)).GetCoins()) + sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, expTokens)}, + ak.GetAccount(ctx, sdk.AccAddress(valOpAddr1)).GetCoins(), + ) // end block to bond validator staking.EndBlocker(ctx, sk) - // set zero outstanding rewards - k.SetOutstandingRewards(ctx, sdk.DecCoins{}) - // fetch validator and delegation val := sk.Validator(ctx, valOpAddr1) // allocate some rewards initial := sdk.TokensFromTendermintPower(10) - tokens := sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDecFromInt(initial)}} + tokens := sdk.DecCoins{sdk.NewDecCoin(sdk.DefaultBondDenom, initial)} + + k.SetOutstandingRewards(ctx, tokens) k.AllocateTokensToValidator(ctx, val, tokens) // historical count should be 2 (initial + latest for delegation) @@ -305,14 +308,20 @@ func TestWithdrawDelegationRewardsBasic(t *testing.T) { // assert correct balance exp := balanceTokens.Sub(valTokens).Add(initial.DivRaw(2)) - require.Equal(t, sdk.Coins{{sdk.DefaultBondDenom, exp}}, ak.GetAccount(ctx, sdk.AccAddress(valOpAddr1)).GetCoins()) + require.Equal(t, + sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, exp)}, + ak.GetAccount(ctx, sdk.AccAddress(valOpAddr1)).GetCoins(), + ) // withdraw commission require.Nil(t, k.WithdrawValidatorCommission(ctx, valOpAddr1)) // assert correct balance exp = balanceTokens.Sub(valTokens).Add(initial) - require.Equal(t, sdk.Coins{{sdk.DefaultBondDenom, exp}}, ak.GetAccount(ctx, sdk.AccAddress(valOpAddr1)).GetCoins()) + require.Equal(t, + sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, exp)}, + ak.GetAccount(ctx, sdk.AccAddress(valOpAddr1)).GetCoins(), + ) } func TestCalculateRewardsAfterManySlashesInSameBlock(t *testing.T) { @@ -458,8 +467,12 @@ func TestCalculateRewardsMultiDelegatorMultWithdraw(t *testing.T) { ctx, _, k, sk, _ := CreateTestInputDefault(t, false, 1000) sh := staking.NewHandler(sk) + initial := int64(20) + totalRewards := sdk.DecCoins{sdk.NewDecCoinFromDec(sdk.DefaultBondDenom, sdk.NewDec(initial*2))} + tokens := sdk.DecCoins{sdk.NewDecCoinFromDec(sdk.DefaultBondDenom, sdk.NewDec(initial))} + // initialize state - k.SetOutstandingRewards(ctx, sdk.DecCoins{}) + k.SetOutstandingRewards(ctx, totalRewards) // create validator with 50% commission commission := staking.NewCommissionMsg(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) @@ -475,8 +488,6 @@ func TestCalculateRewardsMultiDelegatorMultWithdraw(t *testing.T) { del1 := sk.Delegation(ctx, sdk.AccAddress(valOpAddr1), valOpAddr1) // allocate some rewards - initial := int64(20) - tokens := sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDec(initial)}} k.AllocateTokensToValidator(ctx, val, tokens) // historical count should be 2 (validator init, delegation init) @@ -529,6 +540,9 @@ func TestCalculateRewardsMultiDelegatorMultWithdraw(t *testing.T) { // commission should be zero require.True(t, k.GetValidatorAccumulatedCommission(ctx, valOpAddr1).IsZero()) + totalRewards = k.GetOutstandingRewards(ctx).Plus(tokens) + k.SetOutstandingRewards(ctx, totalRewards) + // allocate some more rewards k.AllocateTokensToValidator(ctx, val, tokens) @@ -553,6 +567,9 @@ func TestCalculateRewardsMultiDelegatorMultWithdraw(t *testing.T) { // commission should be half initial require.Equal(t, sdk.DecCoins{{sdk.DefaultBondDenom, sdk.NewDec(initial / 2)}}, k.GetValidatorAccumulatedCommission(ctx, valOpAddr1)) + totalRewards = k.GetOutstandingRewards(ctx).Plus(tokens) + k.SetOutstandingRewards(ctx, totalRewards) + // allocate some more rewards k.AllocateTokensToValidator(ctx, val, tokens) diff --git a/x/distribution/keeper/keeper_test.go b/x/distribution/keeper/keeper_test.go index 56ca707034..fc6f7cc0a1 100644 --- a/x/distribution/keeper/keeper_test.go +++ b/x/distribution/keeper/keeper_test.go @@ -6,7 +6,6 @@ import ( "github.com/stretchr/testify/require" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/distribution/types" ) func TestSetWithdrawAddr(t *testing.T) { @@ -26,21 +25,23 @@ func TestSetWithdrawAddr(t *testing.T) { func TestWithdrawValidatorCommission(t *testing.T) { ctx, ak, keeper, _, _ := CreateTestInputDefault(t, false, 1000) + valCommission := sdk.DecCoins{ + sdk.NewDecCoinFromDec("mytoken", sdk.NewDec(5).Quo(sdk.NewDec(4))), + sdk.NewDecCoinFromDec("stake", sdk.NewDec(3).Quo(sdk.NewDec(2))), + } + // set zero outstanding rewards - keeper.SetOutstandingRewards(ctx, types.OutstandingRewards{}) + keeper.SetOutstandingRewards(ctx, valCommission) // check initial balance balance := ak.GetAccount(ctx, sdk.AccAddress(valOpAddr3)).GetCoins() expTokens := sdk.TokensFromTendermintPower(1000) require.Equal(t, sdk.Coins{ - {"stake", sdk.TokensFromTendermintPower(1000)}, + sdk.NewCoin("stake", sdk.TokensFromTendermintPower(1000)), }, balance) // set commission - keeper.SetValidatorAccumulatedCommission(ctx, valOpAddr3, sdk.DecCoins{ - {"mytoken", sdk.NewDec(5).Quo(sdk.NewDec(4))}, - {"stake", sdk.NewDec(3).Quo(sdk.NewDec(2))}, - }) + keeper.SetValidatorAccumulatedCommission(ctx, valOpAddr3, valCommission) // withdraw commission keeper.WithdrawValidatorCommission(ctx, valOpAddr3) @@ -48,15 +49,15 @@ func TestWithdrawValidatorCommission(t *testing.T) { // check balance increase balance = ak.GetAccount(ctx, sdk.AccAddress(valOpAddr3)).GetCoins() require.Equal(t, sdk.Coins{ - {"mytoken", sdk.NewInt(1)}, - {"stake", expTokens.AddRaw(1)}, + sdk.NewCoin("mytoken", sdk.NewInt(1)), + sdk.NewCoin("stake", expTokens.AddRaw(1)), }, balance) // check remainder remainder := keeper.GetValidatorAccumulatedCommission(ctx, valOpAddr3) require.Equal(t, sdk.DecCoins{ - {"mytoken", sdk.NewDec(1).Quo(sdk.NewDec(4))}, - {"stake", sdk.NewDec(1).Quo(sdk.NewDec(2))}, + sdk.NewDecCoinFromDec("mytoken", sdk.NewDec(1).Quo(sdk.NewDec(4))), + sdk.NewDecCoinFromDec("stake", sdk.NewDec(1).Quo(sdk.NewDec(2))), }, remainder) require.True(t, true) diff --git a/x/distribution/simulation/invariants.go b/x/distribution/simulation/invariants.go index ac4fcdffe5..f722410651 100644 --- a/x/distribution/simulation/invariants.go +++ b/x/distribution/simulation/invariants.go @@ -31,7 +31,7 @@ func AllInvariants(d distr.Keeper, stk types.StakingKeeper) sdk.Invariant { func NonNegativeOutstandingInvariant(k distr.Keeper) sdk.Invariant { return func(ctx sdk.Context) error { outstanding := k.GetOutstandingRewards(ctx) - if outstanding.HasNegative() { + if outstanding.IsAnyNegative() { return fmt.Errorf("negative outstanding coins: %v", outstanding) } return nil diff --git a/x/distribution/types/fee_pool.go b/x/distribution/types/fee_pool.go index 1bf2083c93..bb34ab47cd 100644 --- a/x/distribution/types/fee_pool.go +++ b/x/distribution/types/fee_pool.go @@ -20,7 +20,7 @@ func InitialFeePool() FeePool { // ValidateGenesis validates the fee pool for a genesis state func (f FeePool) ValidateGenesis() error { - if f.CommunityPool.HasNegative() { + if f.CommunityPool.IsAnyNegative() { return fmt.Errorf("negative CommunityPool in distribution fee pool, is %v", f.CommunityPool) } From 8371095fcd5e5b595f0aa1ada476813adf3fce78 Mon Sep 17 00:00:00 2001 From: Alessio Treglia <quadrispro@ubuntu.com> Date: Fri, 15 Feb 2019 15:36:37 +0000 Subject: [PATCH 16/20] Merge PR #3579: Update installation.md, mention snap packages --- docs/gaia/installation.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/docs/gaia/installation.md b/docs/gaia/installation.md index af27917505..b1eb099e65 100644 --- a/docs/gaia/installation.md +++ b/docs/gaia/installation.md @@ -59,6 +59,38 @@ Build tags indicate special features that have been enabled in the binary. | netgo | Name resolution will use pure Go code | | ledger | Ledger devices are supported (hardware wallets) | +### Install binary distribution via snap (Linux only) + +Gaia can be installed on various GNU/Linux distributions from the [Snapcraft.io](https://snapcraft.io/gaia) store: + +```bash +$ sudo snap install gaia +``` + +Development builds are available through the `edge` channel: + +```bash +$ sudo snap install --edge gaia +``` + +::: tip +At the time of writing, only the following [architectures are supported](https://build.snapcraft.io/user/cosmos/cosmos-sdk): `amd64` `i386` `arm64` `armhf` `ppc64el` `s390x`. +::: + +`snap` installs Gaia binaries as `gaia.gaiad` and `gaia.gaiacli`. It is recommended to create commands aliases for the user's convenience once the package is installed: + +``` +$ sudo snap alias gaia.gaiad gaiad +$ sudo snap alias gaia.gaiacli gaiacli +``` + +::: warning +Note that the binaries provided by the snap package save their data into **$HOME/snap/gaia/** instead of **$HOME**. +::: + +Please refer to [Snap documentation](https://docs.snapcraft.io/installing-snapd/6735) for specific information on how to install `snap` on your distribution. + + ### Next Now you can [join the public testnet](./join-testnet.md) or [create you own testnet](./deploy-testnet.md) From c0eec308403ca9fb88055fb708f3c323bf8e3094 Mon Sep 17 00:00:00 2001 From: frog power 4000 <rigel.rozanski@gmail.com> Date: Fri, 15 Feb 2019 10:55:21 -0500 Subject: [PATCH 17/20] Merge PR #3654: x/mint now uses total supply instead of bonded supply --- PENDING.md | 1 + types/{stake.go => staking.go} | 3 ++- x/distribution/types/expected_keepers.go | 1 - x/gov/tally.go | 4 ++-- x/mint/abci_app.go | 2 +- x/mint/expected_keepers.go | 2 +- x/staking/keeper/alias_functions.go | 12 +++++++++--- x/staking/types/validator.go | 2 +- 8 files changed, 17 insertions(+), 10 deletions(-) rename types/{stake.go => staking.go} (97%) diff --git a/PENDING.md b/PENDING.md index e82bc08818..78077de88e 100644 --- a/PENDING.md +++ b/PENDING.md @@ -63,5 +63,6 @@ BUG FIXES * Gaia * SDK + * \#3646 `x/mint` now uses total token supply instead of total bonded tokens to calculate inflation * Tendermint diff --git a/types/stake.go b/types/staking.go similarity index 97% rename from types/stake.go rename to types/staking.go index 8169307c9e..d9143fa4ed 100644 --- a/types/stake.go +++ b/types/staking.go @@ -100,7 +100,8 @@ type ValidatorSet interface { Validator(Context, ValAddress) Validator // get a particular validator by operator address ValidatorByConsAddr(Context, ConsAddress) Validator // get a particular validator by consensus address - TotalPower(Context) Int // total power of the validator set + TotalBondedTokens(Context) Int // total bonded tokens within the validator set + TotalTokens(Context) Int // total token supply // slash the validator and delegators of the validator, specifying offence height, offence power, and slash fraction Slash(Context, ConsAddress, int64, int64, Dec) diff --git a/x/distribution/types/expected_keepers.go b/x/distribution/types/expected_keepers.go index 51b992b3bb..eef0daa547 100644 --- a/x/distribution/types/expected_keepers.go +++ b/x/distribution/types/expected_keepers.go @@ -9,7 +9,6 @@ type StakingKeeper interface { Delegation(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) sdk.Delegation Validator(ctx sdk.Context, valAddr sdk.ValAddress) sdk.Validator ValidatorByConsAddr(ctx sdk.Context, consAddr sdk.ConsAddress) sdk.Validator - TotalPower(ctx sdk.Context) sdk.Int GetLastTotalPower(ctx sdk.Context) sdk.Int GetLastValidatorPower(ctx sdk.Context, valAddr sdk.ValAddress) int64 diff --git a/x/gov/tally.go b/x/gov/tally.go index cc7df2412f..1bf28e493f 100644 --- a/x/gov/tally.go +++ b/x/gov/tally.go @@ -103,11 +103,11 @@ func tally(ctx sdk.Context, keeper Keeper, proposal Proposal) (passes bool, tall // TODO: Upgrade the spec to cover all of these cases & remove pseudocode. // If there is no staked coins, the proposal fails - if keeper.vs.TotalPower(ctx).IsZero() { + if keeper.vs.TotalBondedTokens(ctx).IsZero() { return false, tallyResults } // If there is not enough quorum of votes, the proposal fails - percentVoting := totalVotingPower.Quo(sdk.NewDecFromInt(keeper.vs.TotalPower(ctx))) + percentVoting := totalVotingPower.Quo(sdk.NewDecFromInt(keeper.vs.TotalBondedTokens(ctx))) if percentVoting.LT(tallyParams.Quorum) { return false, tallyResults } diff --git a/x/mint/abci_app.go b/x/mint/abci_app.go index 1758a5c170..5016a464d1 100644 --- a/x/mint/abci_app.go +++ b/x/mint/abci_app.go @@ -12,7 +12,7 @@ func BeginBlocker(ctx sdk.Context, k Keeper) { params := k.GetParams(ctx) // recalculate inflation rate - totalSupply := k.sk.TotalPower(ctx) + totalSupply := k.sk.TotalTokens(ctx) bondedRatio := k.sk.BondedRatio(ctx) minter.Inflation = minter.NextInflationRate(params, bondedRatio) minter.AnnualProvisions = minter.NextAnnualProvisions(params, totalSupply) diff --git a/x/mint/expected_keepers.go b/x/mint/expected_keepers.go index 72bc36a5f5..5169b09576 100644 --- a/x/mint/expected_keepers.go +++ b/x/mint/expected_keepers.go @@ -6,7 +6,7 @@ import ( // expected staking keeper type StakingKeeper interface { - TotalPower(ctx sdk.Context) sdk.Int + TotalTokens(ctx sdk.Context) sdk.Int BondedRatio(ctx sdk.Context) sdk.Dec InflateSupply(ctx sdk.Context, newTokens sdk.Int) } diff --git a/x/staking/keeper/alias_functions.go b/x/staking/keeper/alias_functions.go index 848f660518..aff57bda9f 100644 --- a/x/staking/keeper/alias_functions.go +++ b/x/staking/keeper/alias_functions.go @@ -87,13 +87,19 @@ func (k Keeper) ValidatorByConsAddr(ctx sdk.Context, addr sdk.ConsAddress) sdk.V return val } -// total power from the bond (not last, but current) -func (k Keeper) TotalPower(ctx sdk.Context) sdk.Int { +// total staking tokens supply which is bonded +func (k Keeper) TotalBondedTokens(ctx sdk.Context) sdk.Int { pool := k.GetPool(ctx) return pool.BondedTokens } -// total power from the bond +// total staking tokens supply bonded and unbonded +func (k Keeper) TotalTokens(ctx sdk.Context) sdk.Int { + pool := k.GetPool(ctx) + return pool.TokenSupply() +} + +// the fraction of the staking tokens which are currently bonded func (k Keeper) BondedRatio(ctx sdk.Context) sdk.Dec { pool := k.GetPool(ctx) return pool.BondedRatio() diff --git a/x/staking/types/validator.go b/x/staking/types/validator.go index 7d1f6fa80b..08c095cd49 100644 --- a/x/staking/types/validator.go +++ b/x/staking/types/validator.go @@ -416,7 +416,7 @@ func (v Validator) BondedTokens() sdk.Int { } // get the Tendermint Power -// a reduction of 10^9 from validator tokens is applied +// a reduction of 10^6 from validator tokens is applied func (v Validator) TendermintPower() int64 { if v.Status == sdk.Bonded { return v.PotentialTendermintPower() From 5ccad4723f9541756ea2d60e4824560f89bc8ae5 Mon Sep 17 00:00:00 2001 From: Jack Zampolin <jack.zampolin@gmail.com> Date: Fri, 15 Feb 2019 08:00:41 -0800 Subject: [PATCH 18/20] Merge PR #3642: Tx Query return values --- PENDING.md | 1 + client/lcd/lcd_test.go | 12 +++++++ client/lcd/test_helpers.go | 6 +++- client/tx/query.go | 64 +++++++++++++++++++++----------------- types/result.go | 9 ++++++ 5 files changed, 62 insertions(+), 30 deletions(-) diff --git a/PENDING.md b/PENDING.md index 78077de88e..785a867605 100644 --- a/PENDING.md +++ b/PENDING.md @@ -3,6 +3,7 @@ BREAKING CHANGES * Gaia REST API + * [\#3642](https://github.com/cosmos/cosmos-sdk/pull/3642) `GET /tx/{hash}` now returns `404` instead of `500` if the transaction is not found * Gaia CLI diff --git a/client/lcd/lcd_test.go b/client/lcd/lcd_test.go index 33a02adfe7..c0fd09c64c 100644 --- a/client/lcd/lcd_test.go +++ b/client/lcd/lcd_test.go @@ -7,6 +7,7 @@ import ( "net/http" "os" "regexp" + "strings" "testing" "time" @@ -503,6 +504,17 @@ func TestTxs(t *testing.T) { txs = getTransactions(t, port, fmt.Sprintf("recipient=%s", receiveAddr.String())) require.Len(t, txs, 1) require.Equal(t, resultTx.Height, txs[0].Height) + + // query transaction that doesn't exist + validTxHash := "9ADBECAAD8DACBEC3F4F535704E7CF715C765BDCEDBEF086AFEAD31BA664FB0B" + res, body := getTransactionRequest(t, port, validTxHash) + require.True(t, strings.Contains(body, validTxHash)) + require.Equal(t, http.StatusNotFound, res.StatusCode) + + // bad query string + res, body = getTransactionRequest(t, port, "badtxhash") + require.True(t, strings.Contains(body, "encoding/hex")) + require.Equal(t, http.StatusInternalServerError, res.StatusCode) } func TestPoolParamsQuery(t *testing.T) { diff --git a/client/lcd/test_helpers.go b/client/lcd/test_helpers.go index 787f440494..cbb97ebaec 100644 --- a/client/lcd/test_helpers.go +++ b/client/lcd/test_helpers.go @@ -513,7 +513,7 @@ func getValidatorSets(t *testing.T, port string, height int, expectFail bool) rp // GET /txs/{hash} get tx by hash func getTransaction(t *testing.T, port string, hash string) sdk.TxResponse { var tx sdk.TxResponse - res, body := Request(t, port, "GET", fmt.Sprintf("/txs/%s", hash), nil) + res, body := getTransactionRequest(t, port, hash) require.Equal(t, http.StatusOK, res.StatusCode, body) err := cdc.UnmarshalJSON([]byte(body), &tx) @@ -521,6 +521,10 @@ func getTransaction(t *testing.T, port string, hash string) sdk.TxResponse { return tx } +func getTransactionRequest(t *testing.T, port, hash string) (*http.Response, string) { + return Request(t, port, "GET", fmt.Sprintf("/txs/%s", hash), nil) +} + // POST /txs broadcast txs // GET /txs search transactions diff --git a/client/tx/query.go b/client/tx/query.go index ea54814f28..74bb38495d 100644 --- a/client/tx/query.go +++ b/client/tx/query.go @@ -4,6 +4,7 @@ import ( "encoding/hex" "fmt" "net/http" + "strings" "github.com/gorilla/mux" "github.com/spf13/cobra" @@ -26,18 +27,18 @@ func QueryTxCmd(cdc *codec.Codec) *cobra.Command { Short: "Matches this txhash over all committed blocks", Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { - // find the key to look up the account - hashHexStr := args[0] - cliCtx := context.NewCLIContext().WithCodec(cdc) - output, err := queryTx(cdc, cliCtx, hashHexStr) + output, err := queryTx(cdc, cliCtx, args[0]) if err != nil { return err } - fmt.Println(string(output)) - return nil + if output.Empty() { + return fmt.Errorf("No transaction found with hash %s", args[0]) + } + + return cliCtx.PrintOutput(output) }, } @@ -48,50 +49,46 @@ func QueryTxCmd(cdc *codec.Codec) *cobra.Command { return cmd } -func queryTx(cdc *codec.Codec, cliCtx context.CLIContext, hashHexStr string) ([]byte, error) { +func queryTx(cdc *codec.Codec, cliCtx context.CLIContext, hashHexStr string) (out sdk.TxResponse, err error) { hash, err := hex.DecodeString(hashHexStr) if err != nil { - return nil, err + return out, err } node, err := cliCtx.GetNode() if err != nil { - return nil, err + return out, err } res, err := node.Tx(hash, !cliCtx.TrustNode) if err != nil { - return nil, err + return out, err } if !cliCtx.TrustNode { - err := ValidateTxResult(cliCtx, res) - if err != nil { - return nil, err + if err = ValidateTxResult(cliCtx, res); err != nil { + return out, err } } - info, err := formatTxResult(cdc, res) - if err != nil { - return nil, err + if out, err = formatTxResult(cdc, res); err != nil { + return out, err } - if cliCtx.Indent { - return cdc.MarshalJSONIndent(info, "", " ") - } - return cdc.MarshalJSON(info) + return out, nil } // ValidateTxResult performs transaction verification func ValidateTxResult(cliCtx context.CLIContext, res *ctypes.ResultTx) error { - check, err := cliCtx.Verify(res.Height) - if err != nil { - return err - } - - err = res.Proof.Validate(check.Header.DataHash) - if err != nil { - return err + if !cliCtx.TrustNode { + check, err := cliCtx.Verify(res.Height) + if err != nil { + return err + } + err = res.Proof.Validate(check.Header.DataHash) + if err != nil { + return err + } } return nil } @@ -118,7 +115,7 @@ func parseTx(cdc *codec.Codec, txBytes []byte) (sdk.Tx, error) { // REST -// transaction query REST handler +// QueryTxRequestHandlerFn transaction query REST handler func QueryTxRequestHandlerFn(cdc *codec.Codec, cliCtx context.CLIContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) @@ -126,9 +123,18 @@ func QueryTxRequestHandlerFn(cdc *codec.Codec, cliCtx context.CLIContext) http.H output, err := queryTx(cdc, cliCtx, hashHexStr) if err != nil { + if strings.Contains(err.Error(), hashHexStr) { + rest.WriteErrorResponse(w, http.StatusNotFound, err.Error()) + return + } rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) return } + + if output.Empty() { + rest.WriteErrorResponse(w, http.StatusNotFound, fmt.Sprintf("no transaction found with hash %s", hashHexStr)) + } + rest.PostProcessResponse(w, cdc, output, cliCtx.Indent) } } diff --git a/types/result.go b/types/result.go index b5de7ab47d..e4be53ec5e 100644 --- a/types/result.go +++ b/types/result.go @@ -54,6 +54,7 @@ type TxResponse struct { Tx Tx `json:"tx,omitempty"` } +// NewResponseResultTx returns a TxResponse given a ResultTx from tendermint func NewResponseResultTx(res *ctypes.ResultTx, tx Tx) TxResponse { if res == nil { return TxResponse{} @@ -73,6 +74,7 @@ func NewResponseResultTx(res *ctypes.ResultTx, tx Tx) TxResponse { } } +// NewResponseFormatBroadcastTxCommit returns a TxResponse given a ResultBroadcastTxCommit from tendermint func NewResponseFormatBroadcastTxCommit(res *ctypes.ResultBroadcastTxCommit) TxResponse { if res == nil { return TxResponse{} @@ -95,8 +97,10 @@ func NewResponseFormatBroadcastTxCommit(res *ctypes.ResultBroadcastTxCommit) TxR Tags: TagsToStringTags(res.DeliverTx.Tags), Codespace: res.DeliverTx.Codespace, } + } +// NewResponseFormatBroadcastTx returns a TxResponse given a ResultBroadcastTx from tendermint func NewResponseFormatBroadcastTx(res *ctypes.ResultBroadcastTx) TxResponse { if res == nil { return TxResponse{} @@ -156,3 +160,8 @@ func (r TxResponse) String() string { return strings.TrimSpace(sb.String()) } + +// Empty returns true if the response is empty +func (r TxResponse) Empty() bool { + return r.TxHash == "" && r.Log == "" +} From 906e9509cfcae3330584416c8b8e9cfe6c8d2766 Mon Sep 17 00:00:00 2001 From: Christopher Goes <cwgoes@pluranimity.org> Date: Fri, 15 Feb 2019 17:02:38 +0100 Subject: [PATCH 19/20] PENDING => CHANGELOG; linkify --- CHANGELOG.md | 38 ++++++++++++++++++++++++++++++++++++++ PENDING.md | 37 ++++++++++--------------------------- 2 files changed, 48 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b702ac57c..a0596873d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,43 @@ # Changelog +## 0.32.0 + +BREAKING CHANGES + +* Gaia REST API + * [\#3642](https://github.com/cosmos/cosmos-sdk/pull/3642) `GET /tx/{hash}` now returns `404` instead of `500` if the transaction is not found + +* SDK + * [\#3580](https://github.com/cosmos/cosmos-sdk/issues/3580) Migrate HTTP request/response types and utilities to types/rest. + * [\#3592](https://github.com/cosmos/cosmos-sdk/issues/3592) Drop deprecated keybase implementation's New() constructor in + favor of a new crypto/keys.New(string, string) implementation that + returns a lazy keybase instance. Remove client.MockKeyBase, + superseded by crypto/keys.NewInMemory() + * [\#3621](https://github.com/cosmos/cosmos-sdk/issues/3621) staking.GenesisState.Bonds -> Delegations + +IMPROVEMENTS + +* SDK + * [\#3311] Reconcile the `DecCoin/s` API with the `Coin/s` API. + * [\#3614] Add coin denom length checks to the coins constructors. + * [\#3621](https://github.com/cosmos/cosmos-sdk/issues/3621) remove many inter-module dependancies + * [\#3601] JSON-stringify the ABCI log response which includes the log and message + index. + * [\#3604] Improve SDK funds related error messages and allow for unicode in + JSON ABCI log. + * [\#3620](https://github.com/cosmos/cosmos-sdk/pull/3620) Version command shows build tags + * [\#3638] Add Bcrypt benchmarks & justification of security parameter choice + * [\#3648] Add JSON struct tags to vesting accounts. + +* Tendermint + * [\#3618] Upgrade to Tendermint 0.30.03 + +BUG FIXES + +* SDK + * [\#3646](https://github.com/cosmos/cosmos-sdk/issues/3646) `x/mint` now uses total token supply instead of total bonded tokens to calculate inflation + + ## 0.31.2 BREAKING CHANGES diff --git a/PENDING.md b/PENDING.md index 785a867605..4d87301f0d 100644 --- a/PENDING.md +++ b/PENDING.md @@ -2,28 +2,22 @@ BREAKING CHANGES -* Gaia REST API - * [\#3642](https://github.com/cosmos/cosmos-sdk/pull/3642) `GET /tx/{hash}` now returns `404` instead of `500` if the transaction is not found +* Gaia REST API (`gaiacli advanced rest-server`) -* Gaia CLI +* Gaia CLI (`gaiacli`) * Gaia * SDK - * \#3580 Migrate HTTP request/response types and utilities to types/rest. - * \#3592 Drop deprecated keybase implementation's New() constructor in - favor of a new crypto/keys.New(string, string) implementation that - returns a lazy keybase instance. Remove client.MockKeyBase, - superseded by crypto/keys.NewInMemory() - * \#3621 staking.GenesisState.Bonds -> Delegations * Tendermint + FEATURES -* Gaia REST API +* Gaia REST API (`gaiacli advanced rest-server`) -* Gaia CLI +* Gaia CLI (`gaiacli`) * Gaia @@ -34,36 +28,25 @@ FEATURES IMPROVEMENTS -* Gaia REST API +* Gaia REST API (`gaiacli advanced rest-server`) -* Gaia CLI +* Gaia CLI (`gaiacli`) * Gaia * SDK - * [\#3311] Reconcile the `DecCoin/s` API with the `Coin/s` API. - * [\#3614] Add coin denom length checks to the coins constructors. - * \#3621 remove many inter-module dependancies - * [\#3601] JSON-stringify the ABCI log response which includes the log and message - index. - * [\#3604] Improve SDK funds related error messages and allow for unicode in - JSON ABCI log. - * [\#3620](https://github.com/cosmos/cosmos-sdk/pull/3620) Version command shows build tags - * [\#3638] Add Bcrypt benchmarks & justification of security parameter choice - * [\#3648] Add JSON struct tags to vesting accounts. * Tendermint - * [\#3618] Upgrade to Tendermint 0.30.03 + BUG FIXES -* Gaia REST API +* Gaia REST API (`gaiacli advanced rest-server`) -* Gaia CLI +* Gaia CLI (`gaiacli`) * Gaia * SDK - * \#3646 `x/mint` now uses total token supply instead of total bonded tokens to calculate inflation * Tendermint From 6252de890fdc11f1402c1844e6736238f10e7b47 Mon Sep 17 00:00:00 2001 From: Christopher Goes <cwgoes@pluranimity.org> Date: Fri, 15 Feb 2019 17:17:43 +0100 Subject: [PATCH 20/20] Address @alessio comment --- PENDING.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/PENDING.md b/PENDING.md index 4d87301f0d..cd7bf241b8 100644 --- a/PENDING.md +++ b/PENDING.md @@ -2,9 +2,9 @@ BREAKING CHANGES -* Gaia REST API (`gaiacli advanced rest-server`) +* Gaia REST API -* Gaia CLI (`gaiacli`) +* Gaia CLI * Gaia @@ -15,9 +15,9 @@ BREAKING CHANGES FEATURES -* Gaia REST API (`gaiacli advanced rest-server`) +* Gaia REST API -* Gaia CLI (`gaiacli`) +* Gaia CLI * Gaia @@ -28,9 +28,9 @@ FEATURES IMPROVEMENTS -* Gaia REST API (`gaiacli advanced rest-server`) +* Gaia REST API -* Gaia CLI (`gaiacli`) +* Gaia CLI * Gaia @@ -41,9 +41,9 @@ IMPROVEMENTS BUG FIXES -* Gaia REST API (`gaiacli advanced rest-server`) +* Gaia REST API -* Gaia CLI (`gaiacli`) +* Gaia CLI * Gaia