分类
开启你的网赚之路

一个简单的加密货币钱包

付款方式

什么是加密钱包?

如果您经常交易加密货币,您可能需要将部分加密资金存储在交易所钱包中。 但如果您是长期持有一种或多种加密货币,为了保证安全性和所有权,您更应该将资金存储在冷钱包中。 如果您既想要热钱包的速度和灵活性,也需要冷硬件钱包的安全保障,Ledger 将是您的最佳选择:市场上最值得信赖的硬件钱包, 配合可通过桌面电脑或手机轻松管理资产的软件 Ledger Live。 Ledger 一个简单的加密货币钱包 是安全满足您所有加密货币需求的门户。

订阅我们的
简报

版权所有 © Ledger SAS。保留所有权利。Ledger、Ledger Nano S、Ledger Vault、Bolos 是 Ledger SAS 的注册商标

1 rue du mail, 75002, Paris, France(法国巴黎地址)

付款方式

Exodus 钱包:一个简单的加密货币钱包

有关 exodus 钱包的信息

在 Exodus 开设账户非常简单,只需输入我们的个人数据,然后通过电子邮件发送我们的个人文件副本进行验证。 如果我们不拥有比特币或任何其他加密货币,我们发现的唯一问题是我们将无法进行首次存款。 你必须是一个以前的拥有者,因为 系统不支持或不支持非虚拟货币.

此时,我们可以转移我们在另一个钱包中的资产,例如, 一经存入,许多被限制的功能也将被解锁. 我想这与他们传播和工作的政治有关,因为即使从我所见,工资也是用加密货币支付的。 考虑到他们想要在世界上促进的变化,我并没有争论或认为这是错误的。

关于 Exodus 钱包

一旦我们存入了第一笔资金,他们就会给我们一些第一把钥匙,我们以后必须更改这些钥匙。 Exodus 不会在其系统上保存任何密码,对此他们让其所有者直接负责。 他们也不建议将它们保存在任何数字设备上。 最方便的是将它们保存在物理介质中,即笔和纸。

出埃及记的优点和缺点

出埃及记钱包的优缺点

  • 钱包还可以作为 交换地. 有什么不寻常的。
  • La 种类繁多的加密货币 它提供。 在极少数情况下,我们会觉得少了点什么。
  • 它不存储密码和 他们有一个干净的记录 在政策和良好的道德运作方面。
  • 他们有个 24/7 全天候客户服务 通过不同的渠道。
  • 接口 他们的设计是最好的之一,直观且使用起来非常舒适。
  • Es 世界上最大的虚拟钱包之一. 这使我们认为他们分配给其安全性和功能的努力将会增加。
  • 多么频繁, 并非完全免费 互联网上还有其他一些关于它的谣言或线索。
  • 如果一个人不小心,他们的资产安全可能会受到影响。
  • 缺乏额外的安全层。 也就是说,它可以显示出更多的黑客攻击漏洞。 黑客使用键盘记录器等工具,这些工具通常用于获取密码或机密信息。

出埃及记钱包意见

出埃及记是骗局还是骗局?

我把这个部分放在这个部分是因为普遍的不信任让我们尝试新事物。 最重要的是,考虑到传播的恶作剧的扩散,最终出于恐惧,我们决定不做或忘记我们可能感兴趣的事情。 而且 Exodus 钱包不是骗局。 但是最好通过查找信息来确定,因为它仍然是一个新兴且爆炸式的市场。 它让我想起了外汇的起源以及经纪商开始扩张和出现的时候。

我总是鼓励每个阅读我的人,在论坛或网站上传播一点,寻找其他观点来对比我所说的。 并且除了一些技术问题或用户的小抱怨之外,我还没有看到非常糟糕的评论,例如……某人的资金被保留,或者他们篡夺了其他任何东西,或类似的。 对于这部分, 一个可以冷静。 出埃及记钱包是认真的。

在评估了所有重要点之后,我们可以看到我们面临着一个很好的平台。 它的创建者一直非常关心保持他们所提供的一切的质量,它的用户是主要的受益者。 这意味着他们有一个明显的未来轨迹,他们已经留下来并继续在全球范围内脱颖而出。 毫无疑问,Exodus Wallet 将继续增加满意的客户。

一个简单的加密货币钱包

  • 软件:这些可以是以下类型:
    • 提供高级别安全性的桌面应用程序(因为钱包只能从安装的计算机上运行)
    • 在线钱包是基于网络的并存储在云端(这些黑客更有可能控制它)
    • 移动钱包是在线钱包的简化版本(受到危害的风险更高)

    规划是成功的关键。

    • 它必须生成所需的比特币区块链地址。
    • 钱包需要识别交易并能够将资金发送到上述地址。
    • 在频谱的另一端,钱包需要识别和处理从其他地址接收的比特币交易。
    • 钱包必须存储交易历史记录,并且能够在需要时显示它。请记住,比特币基本上只是数字交易历史。
    • 钱包需要能够处理比特币区块链数据库重组的影响以及比特币社区采取的其他冲突解决行动。
    • 根据几个因素,比特币交易费用有所不同。钱包应该能够根据最新的费率动态计算费用。
    • 必须能够建立和签署比特币交易。
    • 交易完成后,钱包需要将交易广播到比特币区块链。

    如何使用流行的库构建自己的比特币钱包应用程序

    Coinbase软件开发包(SDK):

    BitcoinJ SDK:

    • 它允许开发人员使用密码加密创建比特币钱包应用程序。
    • 适用于现有钱包。
    • 使发送,接收比特币和检查余额变得容易。
    • 开发人员可以使用TestNet3,即官方比特币测试网络和MainNet,即主比特币网络。
    • 可以创建Windows和Android钱包。

    区块链钱包API:

    Blockchain Luxemburg Ltd.可以说是最受欢迎的比特币钱包。开发人员可以使用他们的应用程序编程接口(API)创建比特币钱包应用程序。

    FinClip小程序+Rust(三):一个加密钱包

    FinClip小程序+Rust(三):一个加密钱包

    其中,我们用 Xcode 开发一个 iOS native App 的“壳”,并集成了 FinClip SDK 让这个“壳应用”具备运行小程序的能力,我们并采用 FinClip.com 的线上企业端、运营端生成 SDK 使用时所需的 App ID 和 Secret;想自己拥有本地小程序中心的朋友,则可以安装 FinClip 服务器端的 docker 镜像,并以本地的企业端、运营端生成 SDK 使用时所需的 App ID 和 Secret - 一切都在你自己的电脑本地发生。

    我们又介绍了 Rust 的编译环境针对 iOS 进行编译构建代码所需要安装的相关工具。要端到端开发一个完整的应用,确实涉及到比较多的东西,有学习了解技术工具的学习成本,有时其繁琐性让人却步。但只要搭建起来,就一劳永逸,我们可以开始聚焦应用逻辑本身。

    万事俱备,开搞开搞

    万事俱备,那就让我们开干吧。作为一个范例,我们需要找一个逻辑比较简单又确实适合用 Rust 来实现的场景。在这里,我们选择实现一个加密钱包。设想是这样的:

    • 用 Rust 来实现密钥对的生成、加密存储、交易签名。加密算法,背后都是数学逻辑,显然在什么硬件、操作系统上实现,都应该是一样通用的对吧?
    • 用小程序来实现各种 dApp 的前端,可以是账户余额、交易历史、支付转账之类的账户管理小程序,也可以是各种 DeFi、GameFi 应用,也可以是 NFT 相关工具. 在 Web3 世界里,限制我们的只是想象力

    项目目录结构

    不忙于手工创建所有这些子目录,我们先从 Rust 部分开始:

    Cargo 将创建一个 rust 目录,里面非常简单,仅包含以下内容:

    加密货币钱包的 Rust 实现

    什么是加密货币钱包

    • 一对公私钥:public key 和 private key。私钥是钱包的“命根子”,私钥被盗了(或者自己弄丢了),在链上的资产也就不再是你的。一个公私钥对的例子:公钥是“03fc56c8fa9233a9db9a57b47973058e5cdd7707233619719c604cb11a03dd46d6”,私钥是“721d468dfd4584e88702da69e8e25ebe79bf338ac268413dae3cf73475f5a870”
    • 一个从 public key 产生的 public address。这是便于他人转账、支付给你的账户地址。不同类型的加密数字货币,有不同的地址格式。例如光 Bitcoin 就有 P2PKH、P2SH、Bech32 三种不同格式标准。以太坊的地址格式则是以“0x”起头的 40 位 16 进制字母,例如“0x6400f8fb4953e50ca072e44ddd5fef4c995371a6”

    怎样生成密钥

    生成密钥对通常基于 ECC(Elliptical Curve Cryptography,椭圆曲线)。Bitcoin 和 Ethereum 均采用了一种叫 secp256k1 的算法实现了 ECDSA(Elliptical Curve Digital Signature Algorithm)。

    需要用到的一些库

    • serde: 一个在 Rust 中常用的 serialization/deserialization framework,我们可能把私钥序列化存储在手机设备中,就会用到它
    • serde_json: 一个 JSON serialization 库,我们把私钥序列化存储时,可能以 JSON 格式存储
    • tokio: 一个事件驱动、非阻塞型、异步高性能网络库
    • web3: Ethereum JSON-RPC client. 如果想把自己开发的这个钱包接入以太坊测试链试试的话,这个库跑不掉
    • tiny_keccak:SHA3 等哈希算法的实现

    在本篇内容范围内,我们在 Cargo.toml 先作如下配置:

    超级简单的代码实现

    代码方面,我们打算这么写:首先写一个 wallet 的实现,内容上就是密钥对的生成、公共地址的生成,其他附加功能先留白了。再写一个转换层,基于 Rust FFI(Foreign Function Interface),把 wallet 的功能输出为 C 接口。

    wallet_impl.rs 目前主要是调用 secp256k1 的函数生成密钥对和钱包地址,看上去有点取巧,好像自己啥都没干,就是封装一下。

    但如上所述,我们先“留白”,加密存储密钥、建立网络连接、向测试链查询资产、支付转账等等功能,应该是在此实现的,以后慢慢玩吧,但不影响我们这个项目的根本验证目标(FinClip 小程序调用Rust 功能)。

    在和 wallet_impl.rs 的同一个目录下,还有一个 mod.rs,它用来定义 Rust 的module,详情见 Rust 相关文档,不在此赘述,代码只有一行:

    现在轮到这个项目的焦点部分,就是把上述功能以 C 接口方式输出,以便于我们集成到 FinClip SDK 中,供小程序调用。我们把这部分工作在 lib.rs 中实现:

    这部分代码的 tricks 是什么呢?挑重点讲:

    • 用"#[repr(C)]"来标识我们要输出到 C 侧的数据结构,如 CWallet。它在 wallet_impl 里面有一个对应的 Wallet,用的都是 Rust 的数据类型,例如String。但是到了 C 侧,需要变成以"\0"结束的字符串表示方式。其他任何 Rust 的数据类型或者 struct 结构,如果要输出被外部以“一个简单的加密货币钱包 C style”去调用,首先得把函数的输入参数、返回值都“翻译”成 C 侧能“理解”的结构;
    • 用"#[no_managle]"来标识要输出到 C 侧的函数,防止 Rust 编译器在编译过程中把函数名进行改变;
    • Rust 侧的一个字符串如果要作为返回值输送至 C 侧供其使用,需要把所谓的ownership 也转交过去(否则 Rust 函数在结束执行退出前会把内存清除释放,交到 C 侧变成空指针),这里一个重要手段是用 Rust FFI 提供的CString::into_raw()函数,把一个 Rust 字符串转化成 C 的指针;
    • 对应于上述每一个 CString::into_raw()的调用,必须有一个CString::from_raw()的调用,以便于把 C 侧的字符串内存的 ownership 返还给 Rust 侧,由 Rust 侧释放掉;
    • C 侧的使用者,在调用完 generate_wallet 的接口获得一个 CWallet 后,不得改变 CWallet 一个简单的加密货币钱包 中几个字符串的长度,且事后必须使用 free_wallet 去告知 Rust 侧对内存释放,否则会导致内存泄漏;

    上述几点确实有点“别扭”,这和 C 侧以及 Rust 侧的内存管理模型的差异有关,其中Rust 内存模型的“所有权”(ownership)设计让一些事情变得复杂。确实,用 Rust语言开发的过程往往是和编译器博弈的过程,这背后的逻辑是,我们宁愿把痛苦控制在开发编译阶段,换取生产运行阶段的安全稳定、精神安宁。

    最后,我们来写一个测试程序,命令行验证一下能正常运行,在 examples 目录下,编辑一个 test.rs 文件:

    这里涉及到一些本来很简单偏偏比较繁琐的事情,就是我们尝试从一个准备输出给 C 侧的数据结构 CWallet 中打印出它的 public_addr、public_key、private_key 三个 c_char 指针(记得我们现在是验证一下数据是否正确传递到C侧),我们没办法直接打印 c_char 指针下的内容,因为它们的内存 layout 已经不是 Rust 的 String 类型。

    这时我们不得不用 Rust FFI 里提供的 CStr::from_ptr() 函数来帮助我们把一个c_char 指针构建出一个 CStr 的 wrapper,然后再通过 to_str() 函数指向一个有效的Rust &str(或称之为 Rust 字符串切片),值才能被打印出来。

    验证上述代码运行,我们在 一个简单的加密货币钱包 rust 项目目录下:

    考虑到加密货币钱包还有 paper wallet 一说,即你可以把自己钱包的密钥和钱包地址对应的二维码打印保存在一张纸上并锁在保险箱,使用的时候再取出来,并且因为 paper wallet 是离线的,还被认为是比“热钱包”(即在线的、软件实现的)更安全的机制,所以我们这个小项目虽然简陋也勉强算的上是一个钱包吧?

    构建 iOS 二进制库准备供小程序取用

    走到这一步,剩下的事情就比较简单了。正如我们在《FinClip小程序+Rust(二)》所介绍,需要构建一个 Fat library,以便于我们在 iPhone Simulator 或者在真机都可以调试:

    将在 finclip-rust/rust/target/universal/release 下生成一个 librustywallet.a 文件,这是我们准备添加至xcode项目中的库。