作者:Brett McLain,工程总监 – 加密货币、菲亚特、Stake
如果您对加密货币、支付或质押感兴趣,并希望帮助构建未来的金融系统,Kraken 的融资工程团队正在招聘!
十年前,当 Kraken 推出时,仅支持三种加密货币:BTC、LTC 和 XRP。
如今,Kraken 支持 82 个区块链上的 33 种资产,以及 8 种加密货币的质押服务。
为了促进 Kraken 每年数以百万计的存款、取款和质押交易,加密工程团队运营数百项服务,以确保资金顺利进出交易所。支持这些服务的区块链软件经常更新;对于一些更活跃的区块链,硬分叉和软分叉本质上可以是每月一次,而其他区块链(例如以太坊)则是每年两次。一般来说,我们的区块链基础设施每周至少会有一些软件更新。
支持和更新如此大量的不同服务,同时构建新服务的挑战可能令人望而生畏。
在过去 12 个月中,我们的团队增加了对以下方面的支持:
- 60 种新的加密货币:
- 39 个 ERC20 代币
- Polkadot(主网启动时)
- 草间弥生
- Filecoin(在主网启动时)
- 流程(主网启动时)
- 卡瓦
- Energy Web 代币(在主网启动时)
- 泰达币(TRC20)
- 10 x 平行链众贷
- 索拉纳
- 1 x SPL 代币(血清)
- 米娜
- 8 个新质押资产:
- Polkadot(主网启动时)
- 草间弥生
- 以太坊 2.0(主网启动时)
- 流程(主网启动时)
- 卡尔达诺
- 宇宙
- 卡瓦
- 索拉纳
这些成就是在维护我们现有集成的同时取得的。加密团队的工程师不仅负责内部编写的网关软件,还负责网关所依赖的区块链基础设施的维护和部署。这些项目的区块链开发节奏可能非常快,突破性的变化和新颖的新功能频繁出现,有时几乎没有任何警告。
那么,Kraken是如何做到每年发布数十款新产品,同时跟上区块链发展的快节奏的呢?
端到端 (E2E) 测试!
为什么我们重视 E2E 测试并避免模拟
从 Kraken 成立之初起,就一直强调端到端测试是工程师可以构建的最有价值的测试类型。单元测试占有一席之地,但许多缺乏复杂集成经验的开发人员倾向于为他们构建的每一段代码编写单元测试,因为他们相信他们正在提高正在开发的软件的整体质量。
这条道路虽然充满善意,但往往会导致很多痛苦。过度依赖单元测试往往会巩固你的架构;这就像在整个代码库上浇注一层环氧树脂。您将代码与其测试紧密耦合,使代码更加僵化、不灵活并且难以重构。如果您需要进行更改,您可能需要对测试进行重大更改,并且在某些情况下,完全丢弃它们。重构代码是工程团队工具包中应具备的一项关键功能,任何会增加重构难度的因素都应在引入之前仔细评估。重构代码时,设计良好的 E2E 测试通常不需要进行太多更改,并且可以灵活地调整应用程序的内部结构,同时确保它继续按预期运行。
这是否意味着您不应该编写单元测试?一点也不!在许多情况下,单元测试是完美的解决方案,但是我们发现,对于复杂的集成,端到端测试效果更好。一般来说,为满足以下条件的代码编写单元测试是最有效的:
- 算法复杂,有许多边缘情况。
- 范围严格,要求明确。
- 完成单个工作单元。
- 无国籍。
这些小的、范围紧密的复杂代码通常是更大应用程序的构建块,即使发生重构,这些功能也不太可能改变。在我们的世界中,这将是地址派生、地址验证、交易签名等。
这里的关键要点是,作为一个小型工程团队,我们无法维持目前支持的服务量, 和 无需端到端测试即可构建新产品。单元测试应该被视为赌注,但孤立地看,它们不足以让我们跟上这个不断发展的领域。相反,我们选择大力投资于强大的集成和端到端测试,以验证我们的服务能够在最常见的操作模式下成功运行。
端到端测试的挑战
尽管端到端测试非常强大,但它们并不是万能的。当与第三方服务集成时,此类测试通常会失去很大的价值,因为需要模拟某些端点或接口才能完全测试特定函数或调用的流程。模拟的效果取决于您对所模拟的服务的理解,因此,当更新频繁且规模较大时,模拟可能很容易出错。维护自己的代码和模拟违反了 DRY 原则(不要重复自己),这是 David Thomas 和 Andrew Hunt 在《实用程序员》中创造的术语。他们在书中指出,“每条知识都必须在系统内有一个单一的、明确的、权威的表示。”创建任何服务的模拟版本意味着该服务现在有两个可能不同的副本:您的模拟版本和实际版本。翻译模拟依赖项行为时的错误现在是另一个需要考虑的问题。
注册测试来拯救
值得庆幸的是,大多数区块链都支持运行临时私有网络的能力,这些网络可以作为我们持续集成(CI)/持续部署(CD)流程的一部分启动。最流行的例子是比特币的回归测试(regtest)模式。当您使用“-regtest”选项启动bitcoind时,它会创建一个您可以完全控制的新本地区块链环境。 regtest模式的最大特点是可以随意挖掘任意数量的区块,让您的端到端测试能够完成所有类型和变体的存取款往返,在几秒钟内模拟数百种场景。边缘情况和其他独特场景可以在注册测试模式下轻松模拟,例如多重签名交易、重组、费用替换 (RBF)、子代支付父代 (CPFP) 等等!这些测试不仅确保我们的代码不包含错误,还验证区块链和分类账的最终状态,以确保一切按预期运行。
作为在 Kraken 上添加对新加密货币的支持过程的一部分,融资团队为所有新上市项目构建了一个注册测试框架。该代码是我们维护制度的基础:每当发布新版本时,只需更新区块链节点版本并重新运行我们的 CI 管道即可确保没有重大更改。仔细阅读发行说明并与社区合作仍然非常有必要,但这些测试使我们有信心发布新版本,否则我们不会有这样的测试。
创意解决方案
对我们来说不幸的是,并非所有区块链都像比特币一样经过了战斗考验。新的区块链通常会引入新颖的概念,为了让我们的客户能够接触到最令人兴奋的新技术,Kraken 更愿意在尽可能接近主网启动的时间推出对新区块链的支持。为了在发布日期或临近发布日期安全地支持新资产,Kraken 有时需要开发复杂的测试工具,以获得对集成的信心并确保客户资金不会面临风险。
一个完美的例证是,2.0 年 3 月 1 日主网上线仅 2020 天后,Kraken 就推出了对以太坊 2.0 的支持。尽管全球有数千个人和公司在 Medalla 和 Spadina 等多个测试网上帮助测试了以太坊 2.0,但我们仍然决定通过这种集成将注册测试的概念提升到一个全新的水平。我们很早就知道以太坊 800,000 将是一个重大发展,并且这一信念已被证明是正确的,因为迄今为止已有数百万 ETH 被质押在信标链上,其中包括 Kraken 客户质押的超过 XNUMX ETH。
您可以在下面看到一组服务的图表,每当开发人员向我们的某个 ETH2 代码存储库提交代码时,我们的持续集成 (CI) 管道就会启动和拆除这些服务。
在较高层面上,测试流程是:
- 启动 ETH1 主节点和备用节点(它们各自轮流挖掘共识),其创世包含初始数量的 ETH 用于测试。
- 使用特殊的最小配置模式将 ETH2 信标链节点作为私有链启动,其中仅需要 16 个验证器即可激活创世。
- 将 ETH2 智能合约部署到 ETH1 区块链。
- 将 ETH 存入 ETH2 存款合约,资金将在该合约中被烧毁,并在 ETH2 外部验证器节点上创建验证器。这些验证器仅运行 ETH2 网络,并被视为任何 Kraken 验证器的外部。
- 启动 ETH1 和 ETH2 区块浏览器。
- 启动数据库。
- 启动网关和签名者。
- 插入客户端请求以质押 ETH -> ETH2。
- 网关接收客户端请求并将 ETH 发送到 ETH1 区块链上的存款合约,并在 ETH2 内部验证器节点上创建相应数量的验证器。验证器被分为内部和外部验证器集,这样我们就可以测试当我们的验证器宕机时会发生什么(测试削减、惩罚、失去奖励),并看看当网络的其余部分宕机或离线但我们的验证器时会发生什么保持清醒。
- 进行监控,直到验证者在 ETH2 链上活跃,开始跟踪奖励、支出、测试削减和处罚、丢失奖励检测并向客户支付奖励。
- 对所有交易运行我们单独的财务对账流程,以确保我们所有分类账中的所有内容都正确匹配。
以上只是我们测试框架内发生的事情的高级摘要;还有许多其他测试、检查和验证。如果开发人员需要调试某些内容或查看任一网络的状态,他们可以查阅区块浏览器,一目了然地了解到底发生了什么。我们通常不会在 CI 管道中包含区块浏览器,但考虑到集成的复杂性,在开发阶段可视化链上发生的情况很有帮助。
您可能认为这会给我们的 CI 管道带来巨大的延迟,但幸运的是事实并非如此。目前,我们的以太坊 2.0 存储库的完整 CI 管道只需 14 分钟即可运行。这包括审核/构建所有依赖项、启动所有服务、将各种智能合约部署到区块链、挖掘区块、创建验证器,然后运行所有 100 多个测试场景。
最后的思考
为 Kraken 的每个区块链集成开发全面的 E2E 测试会消耗大量的工程资源。这是我们乐意付出的代价,因为我们最关心的是客户资金的安全并确保他们在我们的平台上拥有优质的体验。如果我们在构建新集成时花更少的时间进行测试,我们的团队是否可以发布更多产品?毫无疑问。然而,这样做不仅违背了工程团队的精神和价值观,而且违背了整个公司的精神和价值观。这些测试确保我们可以安全地更新到区块链软件的新版本,增加硬/软分叉期间的信心,并减轻开发人员在部署更改时的压力。
为什么 Kraken 工程师是业内最受尊敬的工程师之一? 这条信息 Kraken 工程副总裁 Steve Hunt 概述了我们帮助其他区块链工程师的价值观和奉献精神。
来源:https://blog.kraken.com/post/10227/testing-crypto- payments-stake-at-kraken/
- &
- 000
- 11
- 2020
- ACCESS
- 账号管理
- 要积极。
- 所有类型
- 所有交易
- 允许
- 应用领域
- 架构
- 围绕
- 财富
- 办公室文员:
- 战斗
- 信标链
- 比特币
- blockchain
- BTC
- 建立
- 建筑物
- 呼叫
- 例
- 挑战
- 更改
- 支票
- 孩子
- 码
- 合作
- 未来
- 相当常见
- 社体的一部分
- 公司
- 公司
- 信心
- 共识
- 继续
- 合同
- 合同的
- 创造
- 加密
- cryptocurrencies
- cryptocurrency
- 数据库
- 处理
- 延迟
- 检测
- 开发
- 开发商
- 开发
- 研发支持
- 副总经理
- 早
- 边缘
- 有效
- 工程师
- 工程师
- 工程师
- 环境
- ERC20
- ETH
- 复仇
- 以太坊2.0
- 社会思潮
- 事件
- 交换
- 高效率
- 专栏
- 特征
- 法定货币
- 金融
- 高度灵活
- 流
- 骨架
- ,
- 功能
- 资金
- 资金
- 未来
- 其他咨询
- 创世纪
- 非常好
- 大
- 此处
- 高
- 别墅
- 创新中心
- HTTPS
- 数百
- 包含
- 增加
- 行业中的应用:
- 基础设施
- 积分
- 集成
- 隔离
- IT
- 保持
- 键
- 知识
- Kraken
- 大
- 发射
- 铅
- Level
- 房源
- 本地
- LTC
- 制作
- 采矿
- 个月
- 最受欢迎的产品
- Multisig
- 网络
- 新功能
- 新产品
- 节点
- 提供
- 操作
- 附加选项
- 秩序
- 其他名称
- 面包
- 支付
- 平台
- 热门
- 车资
- 私立
- 热销产品
- 项目
- 质量
- 阅读
- 减少
- 信赖
- 岗位要求
- 资源
- REST的
- 奖励
- 风险
- 运行
- 运行
- 实现安全
- 屏风
- 特色服务
- 集
- 小
- 智能
- 聪明的合同
- 智能合同
- So
- 软件
- 太空
- 股权
- 质押
- 开始
- 州/领地
- 应力
- SUPPORT
- 支持
- 支持
- 系统
- 技术
- 临时
- test
- 测试
- 测试
- 次
- 象征
- 最佳
- 跟踪
- 交易
- 交易
- 更新
- 最新动态
- us
- 折扣值
- 体积
- 卷筒纸
- 周
- 中
- 工作
- 世界
- X
- XRP
- 年