从前端到web3 -- 万里长征第一步

  • xing.sir
  • 更新于 2024-04-23 08:18
  • 阅读 387

作为一个想入门web3的前端来说,你一定很熟悉web2。也一定很好奇web3有什么特别呢?

作为一个想入门web3 的前端来说,你一定很熟悉web2。也一定很好奇web3 有什么特别呢?

1. 去中心化

web3 服务多数不存在一个中心化服务器,他们依托于一个P即使有也是为了索引和辅助中心化节点网络存在的。整个链上的数据都可以通过 公链定义的 RPC 接口 获取。web3 用这种方式解决了数据读取的问题。

2. 交易 (transaction)

如上所述,数据读取是公开的。那么写入是怎么控制的呢?

web3 的数据变更任务都被分在了一个叫做交易的基本单位当中。当需要变更的数据的升级后, 发起者需要构建一个交易单位,其中包含了怎么变更数据。这种变更可能是调用系统原生功能转移操作原生基础数据,也可能是调用智能合约变更智能合约相关的数据。构建交易,完成交易签名发送给节点,节点将交易执行,并将数据变更同步到其他的节点。

3. 账户(address)

web3 中的账户存在匿名性,即无法通过一个账户确定一个人,只可以确定相关的数字资产。这也是web3 会被用在勒索病毒中交易的一种重大原因,无法完成溯源。

web3 中的账户称为地址,和一对非对称加密的的秘钥相关,一般由秘钥对的公钥按照一定的算法(或者直接使用公钥)作为账户地址。链上相关的资产全部和这个地址强相关。

4. 签名 (signature)

按照以上的说法,数据全局可读,依赖交易变更数据。验证交易的正确性中包含了账户对应私钥的签名。即 账户对应的私钥控制了账户在公钥上对应的数字资产。 所以,在web3 的世界里存在一种说法。

私钥即为正义

OK. 聊了这么多,接下来,我们来借助一下 SUI 公链 来实践熟悉这些个相关概念。

去中心化节点

web3中访问数据的一个基础设施叫做 浏览器,有别于我们常用的网页浏览器。通过他可以获取到链上所有的账户信息、交易信息、等等。

SUI 的浏览器目前比较好的有两个:

  1. https://suiexplorer.com/
  2. https://suivision.xyz/

节点背后一般对应了 RPC 服务,通过 普通的 http 请求就可以获取相应的链上信息,也可以程序化完成。

sui 官方提供了三组网络对应的 RPC 网关 。

  1. https://fullnode.mainnet.sui.io
  2. https://fullnode.devnet.sui.io
  3. https://fullnode.testnet.sui.io

同时提供了 RPC 文档 https://docs.sui.io/sui-api-ref ,也就是普通的文档请求。你完全可以用自己熟悉的http 请求方式获取信息。 或者使用,官方提供的sdk。

可编程交易

SUI 中交易的基本单位也是交易,区别于其他公链的一个特点是 SUI 的交易具有可编程的特性。 交易的可编程性可以通过 前端代码来完成,即前段代码完成了交易的组合特性。

账户

SUI 的账户支持 三种格式的秘钥: ed25519, secp256k1, secp256r1。同时,由于结合zk 的概念,创建了zk 的账户,可以借助于web2.0 中的登录信息,构建一个账户,这部分账户的签名由zk 来保证,而不是依赖于 普通公钥的非对称加密。

一个代码签名实例

账户初始化

按照以上秘钥对部分的说法,可以使用SUI 的sdk 初始化三种类型的账户:


import { Ed25519Keypair } from "@mysten/sui.js/keypairs/ed25519";
import { Secp256k1Keypair } from "@mysten/sui.js/keypairs/secp256k1";
import { Secp256r1Keypair } from "@mysten/sui.js/keypairs/secp256r1";

const ed25519 = new Ed25519Keypair();
console.log(ed25519.toSuiAddress());

const secp256k1 = new Secp256k1Keypair();
console.log(secp256k1.toSuiAddress());

const pair = new Secp256r1Keypair();
console.log(pair.toSuiAddress());

签名

有了账户,就可以使用私钥进行签名,公钥进行验签,可以完成可信任的P2P验证规则。 所以签名保证了交易的安全性,所以,这篇文章以一个账户签名的实例来入门web3吧。

import { Ed25519Keypair } from "@mysten/sui.js/keypairs/ed25519";
import { Secp256k1Keypair } from "@mysten/sui.js/keypairs/secp256k1";
import { Secp256r1Keypair } from "@mysten/sui.js/keypairs/secp256r1";

describe("Basic account test", async () => {
  it("should return true", async () => {
    const ed25519 = new Ed25519Keypair();
    console.log(ed25519.toSuiAddress());

    const secp256k1 = new Secp256k1Keypair();
    console.log(secp256k1.toSuiAddress());

    const pair = new Secp256r1Keypair();
    console.log(pair.toSuiAddress());

    const messsage = "hello world";

    const signature = await pair.signPersonalMessage(Buffer.from(messsage));
    console.log(signature);

    const result = await pair
      .getPublicKey()
      .verifyPersonalMessage(Buffer.from(messsage), signature.signature);

    console.log(result);
  });
});

欢迎加入 Let's Move 社区:

telegram: <https://t.me/move_cn>\ QQ群: 79489587

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
xing.sir
xing.sir
0x427f...39a8
web3 让世界更美好。