Peera.

趋势

发现最热门的帖子。

帖子

1976
过滤:所有社区
  • article banner.
    0xduckmove.Peera.
    SuiApr 08, 2025
    文章

    👀 SEAL-我认为 Web3 数据隐私即将改变

    👀 SEAL 已在 Sui 测试网上线 — 我认为 Web3 数据隐私即将改变 在 Web3 中,经常会听到诸如“用户拥有自己的数据”或“通过设计去中心化”之类的短语. 但是,仔细观察,许多应用程序仍然依赖集中式基础设施来处理敏感数据——使用 AWS 或 Google Cloud 等服务进行密钥管理. 这就引入了一个矛盾:表面上的去中心化,底层的集中化. 但是,如果有一种方法可以在不放弃权力下放的情况下安全地管理机密呢?介绍 SEAL — 去中心化机密管理 (DSM),现已在 Sui 测试网上线. SEAL 旨在修复 Web3 最大的虚伪之处之一:在秘密使用 AWS 的同时大声疾呼去中心化 你可能会问我:海豹突击队是什么? SEAL 是一种协议,可让您安全、分散地管理敏感数据——专为 Web3 世界构建. 可以将其视为插入 dApp 的隐私优先访问控制层. 您可以将 SEAL 视为一种可编程的数据锁. 你不只是手动锁定和解锁,而是使用Move on Sui将策略直接写入智能合约. 假设你正在构建一个 DApp,其中: -只有 NFT 持有者才能解锁高级教程 -或者,在泄露敏感文件之前,DAO 可能必须进行投票 -或者你想对元数据进行时间锁定并且只能在特定日期之后访问 海豹突击队使所有这些成为可能. 访问控制在链上 运行,完全自动化,无需管理员进行管理. 只是逻辑,直接融入区块链. 海豹突击队使所有这些成为可能. 访问控制在链上 运行,完全自动化,无需管理员进行管理. 只是逻辑,直接融入区块链. 另一个有趣的文章是SEAL如何处理加密. 它使用所谓的阈值加密,这意味着:没有一个节点可以解密数据. 需要一组服务器才能协同工作——有点像多重签名,但用于解锁机密. 这样可以分配信任,避免常见的单点故障问题. 为了保证信息的真正私密性,SEAL 会加密和解密客户端的所有内容. 任何后端都看不到您的数据. 从字面上看,它会留在你的手中,放在你的设备上. 而且 SEAL 不在乎你在哪里存储数据. 无论是 IPFS、Arweave、Walrus 还是其他平台,SEAL 都不会试图控制这部分. 它只关注谁可以看到什么,而不是东西的存储位置. 所以是的,它不仅仅是一个库或 API,它是 dApp 的链上优先、访问控制、默认隐私层. SEAL 填补了一个非常关键的空白. 让我们再分解一下. 如果你正在构建一个处理任何形式的敏感数据(封闭内容、用户文档、加密消息,甚至是锁定时间的 NFT 元数据)的 dApp,你也会遇到同样的问题: ➡️ 如何在不依赖集中服务的情况下安全地管理访问权限? 如果没有像海豹突击队这样的队伍,大多数队伍都会: 使用 AWS KMS 或 Firebase 等集中式工具,这显然与去中心化背道而驰 或者尝试自己修补半生不熟的加密逻辑,这些逻辑通常会变得脆弱且难以审计 https://x.com/EmanAbio/status/1908240279720841425?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1908240279720841425%7Ctwgr%5E697f93dc65359d0c8c7d64ddede66c0c4adeadf1%7Ctwcon%5Es1_&ref_url=https%3A%2F%2Fwww.notion.so%2Fharryph%2FSEAL-Launches-on-Sui-Testnet-1cc4f8e09bb380969c0dcc627b96cc22 这两个比例都不好. 尤其是在你尝试跨多个链或社区构建无需信任的应用程序时. *SEAL 使整个过程模块化和可编程. * 您可以在Move智能合约中定义访问规则,SEAL会处理其余的——密钥生成、解密批准和访问强制执行——所有这些都无需任何人手动颁发密钥或进行后端检查. 更好的是,这些规则是可审计和不可改变的——一旦上链,它们就会遵循合同,而不是人工管理员. 因此,与其问 “谁应该管理对这些数据的访问权限?”你只要问: “应该用什么逻辑来定义访问权限?” >... 然后让链条来处理. 简洁且可扩展. 这就是SEAL不仅仅涉及 “安全工具” 的原因——它是*任何关心隐私、合规性或动态访问逻辑的DApp的基础层. * 这是一个很小的转变——但它改变了我们对 Web3 中数据的看法. *与其在部署后进行加密,或依赖外部服务,不如从内置隐私开始——访问权限完全由智能合约逻辑处理. * 而这正是 Web3 现在需要的. SEAL 实际上是如何运作的? 我们已经介绍了什么是 SEAL以及为什么 Web3 需要它,让我们来看看它在幕后是如何构建的. 这部分是技术性更强的地方,但还是不错的. 一旦你看到所有部分是如何组合在一起的,建筑就会变得很优雅. 总体而言,SEAL的工作原理是使用一种名为基于身份的加密(IBE)的技术,将链上访问逻辑与链下密钥管理相结合. 这允许开发人员将数据加密为身份,然后依靠智能合约来定义允许谁对其进行解密. 步骤 1:智能合约中的访问规则(在 Sui 上) 一切都从智能合约开始. 当你使用 SEAL 时,你需要在你的 Move 合约中定义一个名为 seal_approve 的函数,你可以在这里写下解密条件. 例如,以下是用 Move 编写的简单时间锁定规则: entry fun seal_approve(id: vector, c: &clock::Clock) { let mut prepared: BCS = bcs::new(id); let t = prepared.peel_u64(); let leftovers = prepared.into_remainder_bytes(); assert!((leftovers.length() == 0) && (c.timestamp_ms() >= t), ENoAccess); } 一旦部署,该合约将充当看门人. 每当有人想要解密数据时,他们的请求都会被根据这个逻辑进行检查. 如果通过,密钥将被释放. 如果没有,他们就会被封锁. 没有人需要干预. ##步骤 2:基于身份的加密 (IBE) 这就是魔法发生的地方. SEAL 没有加密特定钱包地址(如 PGP 或 RSA)的数据,而是使用身份字符串——这意味着你可以加密成类似的内容: -0x 钱包地址 -dao_voted: proposal_xyz -pkgid_2025_05_01(基于时间戳的规则) -甚至是 game_user_nft_holder 当数据加密后,它看起来像这样: Encrypt(mpk, identity, message) -mpk = 主公钥(众所周知) -身份 = 逻辑定义的收件人 -消息 = 实际数据 之后,如果有人想解密,密钥服务器会检查他们是否符合政策(通过链上的 seal_approve 调用). 如果获得批准,它将返回该身份的派生私钥. Derive(msk, identity) → sk Decrypt(sk, encrypted_data) 然后,用户可以在本地解密内容. 因此,无需提前知道谁将解密即可完成加密. 您只需定义条件,SEAL 稍后再计算其余部分. 它是动态的. ##第 3 步:密钥服务器 — 脱链,但未集中化 你可能想知道:谁在拿着这些万能钥匙? 这就是 SEAL 的密钥服务器的用武之地. 可以把它看作是一个后端: -持有主密钥 (msk) -关注链上合约(比如你的 seal_approve 逻辑) -仅在满足条件时才发出派生密钥 但是——这是关键——海豹突击队不只依赖一台密钥服务器. 你可以在阈值模式下运行它,在发放解密密钥之前,需要多个独立服务器达成一致. 例如:五分之三的密钥服务器必须批准请求. 这避免了中心故障点,也允许在密钥管理层进行权力下放. 更好的是,将来SEAL将支持MPC(多方计算)和基于飞地的设置(例如TEE),因此您可以在不影响可用性的情况下获得更强的保障. ##步骤 4:客户端解密 将密钥返回给用户后,实际的解密将在用户的设备上进行**. 这意味着: -服务器永远看不到你的数据 -后端从不存储解密的内容 -只有用户可以访问最后的消息 这是一个可靠的隐私模型. 即使有人破坏了存储层(IPFS、Arweave 等),如果不传递访问逻辑,他们仍然无法读取数据. 以下是快速思维模型: 这种结构使您可以轻松构建访问规则不是硬编码的去中心化应用程序,它们是动态的、可审计的,并且完全集成到您的链逻辑中. ##SEAL 背后的团队 SEAL 由区块链安全社区的知名人物Samczsun领导. 他曾是Paradigm的研究合伙人,曾审计过多个生态系统并将其从重大漏洞中拯救出来. 现在,他全职致力于将 SEAL 建成 Web3 隐私基础设施的核心部分. 凭借他的背景和信誉,SEAL 不仅仅是另一个实验工具,它是一次严肃的尝试,旨在使去中心化数据隐私既实用又可扩展. 随着 SEAL 在 Sui 测试网上线,它为 Web3 应用程序如何管理机密带来了新的标准. 通过结合链上访问控制、阈值加密和客户端隐私,SEAL 为去中心化数据处理提供了更值得信赖的基础. 无论你是在构建 dApp、DAO 还是去中心化游戏,SEAL 都提供了一个强大的工具包,可以在不影响去中心化的前提下执行访问控制和保护用户数据. 如果 Web3 要向前发展,像 SEAL 这样的安全基础设施不是可选的——这是必不可少的

    • Sui
    • Architecture
    • SDKs and Developer Tools
    8
  • article banner.
    Foksa.Peera.
    Peera MetaJul 25, 2022
    文章

    How to create an account

    To create an account on the Peeranha website you need to log in first. Peeranha supports four wallets you can log in with: Torus, MetaMask, WalletConnect, and Coinbase. Note: If you are new to Web3 we recommend you to use Torus. Log in with Torus Click Log in. Select the checkbox I agree to the Terms and Conditions and Privacy Policy. Choose Torus in the pop-up window. Select any of the suggested ways you want to sign in or enter your email address. You are now logged in and have an account. In your profile section, you can add more detailed information about yourself and track your progress and achievements. To edit your profile, click Profile and select Edit. Enter all the information that you want to be visible in your profile.

    • tutorial
    5
  • loth.broke.Peera.
    PolygonMar 31, 2025
    专家问答

    在 dockerized 本地网络设置中使用 heimdallcli?

    heimdallcli我正在尝试matic-cli在我设置的本地 dockerized 网络中使用. 我的主要目标是使用这个命令发送提案:heimdallcli tx gov submit-proposal param-change {pathToProposalJSONFile} --validator-id {validatorID} --chain-id {chainID}.但是,我遇到了一个错误,内容是:'在 “/var/lib/heimdall/config” 中找不到配置文件 “heimdall-config” '. 尽管我可以看到表明海姆达尔正在运行的日志,但配置目录似乎不存在于Docker环境中. 我怎样才能解决这个问题并让heimdallcli命令起作用?

    • Polygon PoS
    5
    4
    最佳答案
  • article banner.
    Foksa.Peera.
    Peera MetaJul 08, 2022
    文章

    How to make a post

    Making posts on Peeranha is easy. Follow the simple steps: Log in to your profile with any available wallets. Click the New post button. Select a community from the dropdown list where you want to make a post. Choose Post Type: Discussion, Expert, Tutorial. Note: Read carefully the requirements for each post type, to be sure that your post is published in the correct section. Enter your question in the Title field. To get a more detailed answer, give more details about what you would like to know in the Body field. In the Preview section, you may check how your post looks before publishing it. Select tags that suit your post most. Note: Tags help other users to find relevant information quickly. Click Post. Your post is published and soon you will get relevant answers from the other users.

    • tutorial
    5
  • article banner.
    harry phan.Peera.
    SuiApr 24, 2025
    文章

    使用 public_receive 进行跨模块儿童管理

    这是 “Sui Move 中的亲子对象” 系列的第 3 部分. 有时,您的父类型和子类型是在不同的模块甚至不同的包中定义的. 例如,您可能有一个可以存储任何类型的 Parcel 对象的通用仓库对象. 仓库模块想要提取一个包裹子节点,但是包裹类型是在其他地方定义的. 在这种情况下,我们使用 transfer:: public_receive,它是 receive 的跨模块表兄弟. ###接收 vs public_receive 正如我们所见,transfer:: receive 只能在定义 T(或朋友)的模块中调用,因为它不需要 T: store. Move 字节码验证器实际上确保在任何要接收的调用中,T 类型来自当前模块. 这是对仅限钥匙的对象的安全限制. transfer:: public_receive 是一个变体,它需要 T: key + store,但允许在 T 的模块之外接收. 换句话说,如果对象类型具有存储能力(这意味着它可以自由存在于全局存储中),则任何模块(给定父模块的 &mut UID)都可以使用 public_receive 接收它. 这非常适合父模块与子模块不同的情况. 为什么需要商店?因为存储标志着该对象可以安全地保存并在其定义模块之外传递. 仅限密钥的对象可能具有原始模块希望在传输/接收时强制执行的自定义不变量;通过排除public_receive中的那些不变量,Sui会强制开发人员在模块内处理它们(正如我们将在灵魂绑定对象中看到的那样). 如果一个对象有存储,则更宽松,而且 Sui 允许使用通用的传输/接收逻辑在外部对其进行管理. ###示例:分离父模块和子模块 让我们用一个简单的场景来说明一下:一个存储 Parcel 对象的仓库. 包裹类型在自己的模块中定义,仓库在另一个模块中定义. 我们将展示仓库如何使用 public_receive 接收子包裹. module demo::parcel { // Child module use sui::object::{Self, UID}; use sui::tx_context::{Self, TxContext}; /// A parcel object that can be stored in a Warehouse. /// It has both key and store, so it can be transferred across modules. struct Parcel has key, store { id: UID, contents: vector } public entry fun create_parcel(contents: vector, ctx: &mut TxContext): Parcel { Parcel { id: object::new(ctx), contents } } } module demo::warehouse { // Parent module use sui::transfer::{Self, Receiving, public_receive}; use demo::parcel::{Self, Parcel}; use sui::object::{UID}; use sui::tx_context::{Self, TxContext}; struct Warehouse has key { id: UID, location: address } public entry fun create_warehouse(location: address, ctx: &mut TxContext): Warehouse { Warehouse { id: object::new(ctx), location } } /// Receive a Parcel that was sent to this Warehouse. /// Returns the Parcel to the caller (transferred to caller's address). public entry fun withdraw_parcel( warehouse: &mut Warehouse, parcel_ticket: Receiving, ctx: &mut TxContext ): Parcel { // Using public_receive because Parcel is defined in another module and has store let parcel = public_receive(&mut warehouse.id, parcel_ticket) oai_citation_attribution:27‡docs.sui.io oai_citation_attribution:28‡github.com; // Transfer the parcel to the transaction sender (so the caller gets ownership) transfer::transfer(parcel, tx_context::sender(ctx)); // We return nothing because we've transferred the Parcel out to the caller. } } 让我们分解一下 redath_parcel 中发生了什么: -我们打电话给 public_receive (&mut warehouse.id, parcel_ticket)由于 Parcel 具有存储能力,因此即使我们不在包裹模块中,也允许此调用. 在幕后,它会执行与接收相同的检查和提取,但允许跨模块进行检查,因为存储表明这样做是安全的. https://github.com/MystenLabs/sui/blob/main/crates/sui-framework/packages/sui-framework/sources/transfer.move#:~:text=public%20fun%20public_receive,T%3E%29%3A%20T -然后,我们会立即将收到的包裹转到来电者的地址(tx_context:: sender(ctx)). 此步骤可确保包裹离开仓库并交给发起提款的用户. 我们也可以直接从函数中返回 Parcel,然后 Sui 会将其视为由调用者地址拥有的输出(因为它是输入函数的输出). 进行显式传输更为冗长,但可以清楚地说明发生了什么(并允许我们在释放对象之前进行任何检查). 为什么要在包裹中加入店铺?如果 Parcel 缺乏存储能力(即只有密钥),则 demo:: warehouse 中的 public_receive 调用将无法编译 — Sui 强制要求 T 为 public_receive 存储. 在这种情况下,我们将被迫在包裹模块本身中使用接收功能(或使用某种朋友关系)来取回包裹,这会使跨模块的设计变得复杂. 通过在 Parcel 中添加存储,我们实际上是在说 “这个对象可以自由移动和被外部模块接收”,这正是我们想要的通用容器模式. 函数调用模式:要在交易中使用它们,流程为: 存款(转移到对象):致电转移:: public_transfer(parcel_obj,@warehouse_id)将包裹发送到仓库. 这会将包裹的所有者标记为仓库. (我们在这里使用 public_transfer 是因为它在 Parcel 模块之外,而且 Parcel 有存储. 在包裹模块内,普通的传输也可以. ) 提款(收回):稍后,致电撤回包裹(warehouse_obj,接收(包裹编号,...)). SDK 可以通过引用包裹的 ID 和最新版本来获取接收信息. 该函数将调用 public_receive 然后将包裹转移给你. 在拨打 redth_parcel 电话后,包裹的所有者回到了一个地址(你的),所以它又是一个普通的地址拥有的物品. 仓库不再拥有它. 跨模块注意事项:请注意,仓库模块需要了解包裹类型(我们使用 demo:: parcel:: Parcel). 这是因为我们将接收明确键入为接收. 如果你想要一个可以接收任何类型对象的真正通用容器,你必须使用泛型或其他方法(可能是带有类型擦除的动态字段). 但是对于大多数用例,你会知道你期望的是什么类型的孩子. 为什么 public_receive 而不只是调用 receive?如果我们尝试在仓库模块中转移:: 接收(&mut warehouse.id,parcel_ticket),则移动验证器会拒绝,因为在 demo:: warehouse 中没有定义包裹. Sui 提供了 public_receive 作为通过额外能力检查(需要存储)来实现此目的的好方法. 同样,Sui 也有传输与 public_transfer、freeze_object 与 public_freeze_object 等,遵循相同的模式:public_ 版本在定义模块之外使用,需要存储. 别忘了家长的许可:即使有 public_receive,你仍然需要那个 &mut warehouse.id. 我们之所以得到它,是因为撤回包裹在 Warehouse 的模块中并接受 &mut Warehouse. 因此,只有可以这样称呼的人(仓库的所有者)才能提取包裹. 如果仓库模块没有公开提供这样的函数,那么也没有人可以在外部对其子模块调用 public_receive. 因此,跨模块不会绕过父级的控制;它只允许父级的代码处理其未定义类型的子类型. 关于存储能力的说明:提供对象存储可以使其更加灵活,但限制稍微减少一点——任何具有父引用的模块都可以使用 public_receive 将其拉出. 如果你想限制对象的检索方式(例如,强制执行自定义逻辑或防止轻松提取),你可以故意将其设为仅限密钥. 我们将用灵魂束缚的物体来看这个例子. 在这种情况下,你可以实现自定义接收函数,而不是依赖 public_receive. 总结一下这部分:public_receive 是你管理其他模块中定义的子对象的好友,只要这些对象具有存储能力即可. 它允许您构建跨模块系统(例如我们的仓库/包裹),同时仍然尊重所有权和访问控制. 只要记得在子类型上添加存储,并在从模块外部将它们发送给父类型时使用 public_transfer 即可.

    • Sui
    • Architecture
    5
  • Vens.sui.Peera.
    SuiApr 29, 2025
    专家问答

    Sui 生态系统中的 AMM 机器人

    Sui 生态系统中 AMM 机器人的主要特征和功能是什么?他们如何改进传统的交易机制,以及它们为在Sui网络上使用DeFi协议的用户提供了哪些优势? 例如,我需要建造一个还是可以使用 Turbos Finance

    • Sui
    5
    2
    最佳答案
  • article banner.
    0xduckmove.Peera.
    SuiApr 25, 2025
    文章

    回顾一下这段视频可以为你的 Sui 开发之旅增光添彩

    说实话,如果你曾经在Sui上构建过,你可能碰到了一些墙. 从神秘的对象 ID 到兼顾 CLI 和启动本地网络,这就像在你编写第一行业务逻辑之前就为一场 boss 战斗做准备一样. 在最近作为 “溢出之路” 系列的一次研讨会上,来自Dubhe Foundation的Moven详细介绍了Dubhe Engine的工作原理、它解决了哪些问题,以及它如何不仅仅是一个工具——它是一个不断发展的运动. 视频链接:https://www.youtube.com/watch?v=CHkOS-TYehM 问题:零散的工具,繁重的设置 Moven 以一些关于当前 Sui 开发格局的真实讨论拉开了序幕: -新手面临着艰难的学习曲线:设置钱包、领取测试代币、脚手架包、学习 Move 语法、启动本地测试网、配置 SDK 等. -即使是经验丰富的开发人员也会发现自己将时间浪费在重复的设置任务上,而不是专注于实际的DApp逻辑. -代码库迅速变得单一——包含数据结构、构造函数、助手和输入函数的大型、混乱的 .move 文件都挤在一起. 简而言之:生态系统发展迅速,但这些工具直到现在都没有跟上. ##解决方案:基于架构的代码生成 Dubhe Engine的核心是一个关键思想:架构优先开发. 只需一个配置文件 (d.config.ts),开发人员就可以定义: -他们的链上数据结构 -活动 -错误 -自定义类型(甚至是自定义结构的二维向量!) 然后,一个命令 (pnpm dub schema:gen) 会自动生成一个完全结构化的 Move 包和前端集成,包括: -模块化文件结构 -链上可组合性(通过从 Sui 发布的包中导入) -本地网络设置、构建、部署和前端支持(Next.js 就绪) 你写逻辑. dubhe处理样板文件. ##* ⏱️ 真正的影响:重复代码减少了 80%* 在内部实验中,Dubb生成的项目表明,只有20%的代码必须手动编写,其余的是通过架构自动生成的脚手架. 这意味着更快的原型设计、更少的错误,并有更多时间专注于真正重要的事情:应用程序的核心价值. ##开发生态系统引擎 Dubb 并没有停在脚手架上. Movin明确表示:这是新开发经济的基础设施. 以下是 Dubb Engine 社区的发展历程: 汽油补贴:**适用于尝试使用Dubb的新建筑商 任务赏金:**像 GitHub 的 “第一期不错的问题”,但有奖励 治理层 (D-OS):** 针对项目优先级的链上投票 Launchpad 支持:**帮助成熟的项目获得资金 dApp Staking:**用户可以质押 D 代币来支持他们最喜欢的 dApp 并对路线图决策进行投票 这种反馈循环推动了��个 Sui 生态系统:更多的开发者 → 更多的应用程序 → 更多的用户 → 更多的开发者.

    • Architecture
    • SDKs and Developer Tools
    5
  • yhant3.Peera.
    SuiDec 08, 2024
    讨论

    How to access and manage nested structs and dynamic fields in Move?

    How to access and manage nested structs and dynamic fields in Move?

    • Sui
    • Move
    5
    6
    最佳答案
  • article banner.
    Foksa.Peera.
    Peera MetaJul 25, 2022
    文章

    How to answer posts

    Providing answers on Peeranha is easy, but at the same time, it is a responsible task. Remember that your correct answers help other users to find solutions to their challenges. To provide an answer, follow the simple steps: Log in to your profile with any available wallets. Select a post that you would like to answer. Use the Body field to provide an answer. In the Preview section, you may check how your answer looks before publishing it. Click Post answer. Your answer is posted and it will help some of the users to solve their issues.

    • tutorial
    4
  • 0xffda...7cf4.Peera.
    AnkrJan 25, 2023
    专家问答

    How do I become Ankr node provider?

    Hey! Can I physically run Nod Ankr? What kind of set-up do I need? Or is the only way to become Ankr node provider is described in this question.

    • Node Provider
    4
    2
我们使用 cookie 确保您在我们的网站上获得最佳体验。
更多信息