Sui.

Trendend

Entdecke die angesagtesten Beiträge.

Beiträge

679
  • Vens.sui.Peera.
    FürSuiApr 29, 2025
    Experten Q&A

    AMM-Bot im Sui-Ökosystem

    Was sind die wichtigsten Merkmale und Funktionen von AMM-Bots im Sui-Ökosystem? Wie verbessern sie traditionelle Handelsmechanismen und welche Vorteile bieten sie Benutzern, die sich mit DeFi-Protokollen im Sui-Netzwerk beschäftigen? Muss ich einen bauen oder kann ich zum Beispiel Turbos Finance verwenden

    • Sui
    8
    2
    Beste Antwort
  • article banner.
    0xduckmove.Peera.
    FürSuiApr 08, 2025
    Artikel

    👀 SEAL- Ich denke, der Datenschutz bei Web3 wird sich bald ändern

    👀 SEAL ist live auf Sui Testnet — ich denke, der Datenschutz bei Web3 wird sich bald ändern Im Web3 hört man häufig Ausdrücke wie* „Die Nutzer besitzen ihre Daten“* oder* „von Natur aus dezentralisiert“*. Aber wenn Sie genau hinschauen, verlassen sich viele Anwendungen immer noch auf zentralisierte Infrastrukturen, um sensible Daten zu verarbeiten — und nutzen Dienste wie AWS oder Google Cloud für die Schlüsselverwaltung. Dies führt zu einem Widerspruch: Dezentralisierung an der Oberfläche, Zentralisierung unter der Oberfläche. Aber was wäre, wenn es eine Möglichkeit gäbe, Geheimnisse sicher zu verwalten, ohne die Dezentralisierung aufzugeben? Wir stellen vor: SEAL — Decentralized Secrets Management (DSM), das jetzt live im Sui Testnet verfügbar ist. SEAL hat sich zum Ziel gesetzt, eine der größten Heucheleien von Web3 zu beheben: die Zurufe nach Dezentralisierung und der heimlichen Nutzung von AWS Du fragst mich vielleicht: Was ist SEAL? SEAL ist ein Protokoll, mit dem Sie sensible Daten sicher unddezentralverwalten können — speziell für die Web3-Welt entwickelt. Stellen Sie sich das als eine Zugriffskontrollschicht vor, bei der der Datenschutz an erster Stelle steht und in Ihre DApp integriert wird. Du kannst dir SEAL als eine Art programmierbares Schloss für deine Daten vorstellen. Sie sperren und entsperren Dinge nicht einfach manuell — Sieschreiben mithilfe von Move on Sui Richtlinien direkt in Ihre Smart Contracts. Nehmen wir an, Sie erstellen eine dApp, bei der: Nur NFT-Inhaber können ein Premium-Tutorial freischalten Oder vielleicht muss ein DAO abstimmen, bevor sensible Dateien aufgedeckt werden Oder Sie möchten, dass Metadaten zeitgebunden sind und erst nach einem bestimmten Datum zugänglich sind SEAL macht all das möglich. Die Zugriffskontrolle erfolgt onchain, vollständig automatisiert, sodass kein Administrator sie verwalten muss. Nur Logik, direkt in die Blockchain integriert. SEAL macht all das möglich. Die Zugriffskontrolle erfolgt onchain, vollständig automatisiert, sodass kein Administrator sie verwalten muss. Nur Logik, direkt in die Blockchain integriert. Ein weiterer interessanter Artikel ist, wie SEAL mitVerschlüsselungumgeht. Es verwendet eine sogenannteSchwellenwertverschlüsselung, was bedeutet: Kein einzelner Knoten kann die Daten entschlüsseln. Es braucht eine Gruppe von Servern, um zusammenzuarbeiten — quasi wie Multi-Sig, nur um Geheimnisse zu entsperren. Das verteilt Vertrauen und vermeidet das übliche Single-Point-of-Failure-Problem. Und um die Dinge wirklich geheim zu halten, verschlüsselt und entschlüsselt SEAL allesauf der Clientseite. Ihre Daten sind für kein Backend sichtbar. Sie bleiben — im wahrsten Sinne des Wortes — in Ihren Händen auf Ihrem Gerät. und SEAL ist es egal, wo Sie Ihre Daten speichern. Ob es sich um IPFS, Arweave, Walrus oder eine andere Plattform handelt, SEAL versucht nicht, diesen Teil zu kontrollieren. Es konzentriert sich nur darauf,wer was sehen darf, nicht darauf, wo Dinge aufbewahrt werden. Also ja, es ist nicht nur eine Bibliothek oder API — es ist eineonchain first, zugriffskontrollierte, standardmäßige Datenschutzebenefür deine dApp. SEAL füllt eine ziemlich kritische Lücke. Lassen Sie uns das etwas genauer aufschlüsseln. Wenn Sie eine dApp erstellen, die sich mitjeder Form vertraulicher Datenbefasst — geschützte Inhalte, Benutzerdokumente, verschlüsselte Nachrichten, sogar zeitgesperrte NFT-Metadaten —, werden Sie auf dasselbe Problem stoßen: ➡️ Wie verwalten Sie den Zugriff sicher, ohne sich auf einen zentralen Dienst verlassen zu müssen? Ohne so etwas wie SEAL können die meisten Teams entweder: Verwenden Sie zentralisierte Tools wie AWS KMS oder Firebase, was eindeutig gegen die Dezentralisierung verstößt Oder versuchen Sie, eine unausgegorene Verschlüsselungslogik selbst zusammenzusetzen, was sich in der Regel als spröde herausstellt und schwer zu überprüfen ist 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 Keines davon skaliert gut. Vor allem nicht, wenn Sie versuchen, vertrauenswürdige Apps über mehrere Ketten oder Communities hinweg zu entwickeln. SEAL macht den gesamten Prozess modular und programmierbar. Sie definieren Ihre Zugriffsregeln in Move Smart Contracts, und SEAL kümmert sich um den Rest — Schlüsselgenerierung, Entschlüsselungsgenehmigungen und Zugriffsdurchsetzung — alles, ohne dass jemand manuell Schlüssel ausstellt oder Backend-Checks durchführt. Und was noch besser ist: Diese Regeln sindüberprüfbar und unveränderlich— sobald sie online sind, folgen sie dem Vertrag, nicht einem menschlichen Administrator. Anstatt also zu fragen, „wer sollte den Zugriff auf diese Daten verwalten?“ du fragst einfach: „Welche Logik sollte den Zugriff definieren?“ > ... und lass die Kette das erledigen. Sauber und skalierbar. Das macht SEAL für mehr als nur „Sicherheitstools“ relevant — es ist eine Basisebene fürjede dApp, die Wert auf Datenschutz, Compliance oder dynamische Zugriffslogik legt. Es ist eine kleine Veränderung — aber sie ändert viel daran, wie wir Daten in Web3 betrachten. Anstatt nach der Bereitstellung zu verschlüsseln oder sich auf externe Dienste zu verlassen,beginnen Sie mit integriertem Datenschutz — und der Zugriff wird vollständig über eine intelligente Vertragslogik abgewickelt. Und genau das braucht Web3 gerade. Wie funktioniert SEAL eigentlich? Wir haben behandelt, was SEAL istundwarum Web3 es braucht**. Schauen wir uns an, wie es tatsächlich unter der Haube aufgebaut ist. In diesem Teil werden die Dinge technischer — aber auf eine gute Art und Weise. Die Architektur ist elegant, wenn man sieht, wie alle Teile zusammenpassen. Auf einer hohen Ebene kombiniert SEALOnchain-Access-LogikmitOff-Chain-Schlüsselmanagement. Dabei wird eine Technik namensIdentity-Based Encryption (IBE) verwendet. Auf diese Weise können Entwickler Daten zu einer Identität verschlüsseln und sich dann auf intelligente Verträge verlassen, um zu definieren, wer sie entschlüsseln dürft. Schritt 1: Zugriffsregeln in Smart Contracts (auf Sui) Alles beginnt mit dem Smart Contract. Wenn Sie SEAL verwenden, definieren Sie in Ihrem Move-Vertrag eine Funktion namens seal_approve — hier schreiben Sie Ihre Bedingungen für die Entschlüsselung. Hier ist zum Beispiel eine einfache Time-Lock-Regel, die in Move geschrieben wurde: 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); } Einmal eingesetzt, fungiert dieser Vertrag als Gatekeeper. Immer wenn jemand Daten entschlüsseln möchte, wird seine Anfrage anhand dieser Logik überprüft. Wenn es erfolgreich ist, wird der Schlüssel freigegeben. Wenn nicht, sind sie blockiert. Niemand muss eingreifen. ##Schritt 2: Identitätsbasierte Verschlüsselung (IBE) Hier passiert die Magie. Anstatt Daten für eine bestimmte Wallet-Adresse zu verschlüsseln (wie bei PGP oder RSA), verwendet SEALIdentitätszeichenfolgen— das heißt, Sie verschlüsseln mit etwas wie: 0 x Wallet-Adresse dao_voted:proposal_xyz pkgID_2025_05_01 (eine auf Zeitstempeln basierende Regel) oder sogar game_user_nft_holder Wenn die Daten verschlüsselt sind, sieht das so aus: Encrypt(mpk, identity, message) mpk = öffentlicher Hauptschlüssel (allen bekannt) Identität = der durch die Logik definierte Empfänger Nachricht = die tatsächlichen Daten Wenn später jemand entschlüsseln möchte, prüft der Schlüsselserver, ob sie der Richtlinie entsprechen (über den Aufruf seal_approve in der Kette). Wenn es genehmigt wird, gibt es einen abgeleiteten privaten Schlüssel für diese Identität zurück. Derive(msk, identity) → sk Decrypt(sk, encrypted_data) Der Benutzer kann den Inhalt dann lokal entschlüsseln. Die Verschlüsselung erfolgt also, ohne dass man im Voraus wissen muss, wer entschlüsselt. Sie definieren einfach die Bedingungen und SEAL findet den Rest später heraus. Es ist dynamisch. ##Schritt 3: Der Schlüsselserver — Offchain, aber nicht zentralisiert Sie fragen sich vielleicht: Wer besitzt diese Hauptschlüssel? An dieser Stelle kommt derKey Servervon SEAL ins Spiel. Stellen Sie sich das als ein Backend vor, das: Enthält den geheimen Hauptschlüssel (msk) Überwacht On-Chain-Verträge (wie deine seal_approve-Logik) Gibt abgeleitete Schlüssel nur aus, wenn die Bedingungen erfüllt sind Aber — und das ist entscheidend — SEAL ist nicht nur auf einen Schlüsselserver angewiesen. Sie können ihn imSchwellenwertmodusausführen, in dem sich mehrere unabhängige Server einigen müssen, bevor ein Entschlüsselungsschlüssel ausgegeben wird. Beispiel: 3 von 5 Schlüsselservern müssen die Anfrage genehmigen. Dadurch werden zentrale Fehlerquellen vermieden und eine Dezentralisierung auch auf der Schlüsselverwaltungsebene ermöglicht. Und was noch besser ist: SEAL wird in ZukunftMPC (Multi-Party Computation) undEnklave-basierte Setups(wie TEE) unterstützen — so können Sie noch bessere Garantien erhalten, ohne die Benutzerfreundlichkeit zu beeinträchtigen. ##Schritt 4: Clientseitige Entschlüsselung Sobald der Schlüssel an den Benutzer zurückgegeben wurde, erfolgt die eigentliche Entschlüsselungauf seinem Gerät. Das bedeutet: Der Server sieht niemals deine Daten Das Backend speichert niemals entschlüsselte Inhalte Nur der Benutzer kann auf die endgültige Nachricht zugreifen Es ist ein solides Datenschutzmodell. Selbst wenn jemand die Speicherebene (IPFS, Arweave usw.) kompromittiert, kann er die Daten immer noch nicht lesen, ohne die Zugriffslogik zu übergeben. Hier ist das schnelle mentale Modell: Diese Struktur macht es einfach, DApps zu erstellen, bei denen die Zugriffsregeln nicht fest codiert sind — sie sind dynamisch, überprüfbar und vollständig in Ihre Kettenlogik integriert. ##Das Team hinter SEAL SEAL wird vonSamczsungeleitet, einer bekannten Persönlichkeit in der Blockchain-Sicherheitsgemeinschaft. Ehemals Forschungspartner bei Paradigm hat er mehrere Ökosysteme geprüft und vor größeren Exploits bewahrt. Jetzt konzentriert er sich in Vollzeit darauf, SEAL zu einem Kernstück der Datenschutzinfrastruktur von Web3 zu machen. Mit seinem Hintergrund und seiner Glaubwürdigkeit ist SEAL nicht nur ein weiteres experimentelles Tool — es ist ein ernsthafter Versuch, den dezentralen Datenschutz sowohl praktisch als auch skalierbar zu machen. Da SEAL im Sui Testnet live geht, wird ein neuer Standard dafür eingeführt, wie Web3-Anwendungen Geheimnisse verwalten können. Durch die Kombination von On-Chain-Zugriffskontrolle, Schwellenwertverschlüsselung und clientseitigem Datenschutz bietet SEAL eine vertrauenswürdigere Grundlage für die dezentrale Datenverarbeitung. Egal, ob Sie DApps, DAOs oder dezentrale Spiele entwickeln — SEAL bietet ein leistungsstarkes Toolkit, um die Zugriffskontrolle durchzusetzen und Benutzerdaten zu schützen, ohne Kompromisse bei der Dezentralisierung einzugehen. Wenn Web3 voranschreiten soll, ist eine sichere Infrastruktur wie SEAL nicht optional — sie ist unerlässlich

    • Sui
    • Architecture
    • SDKs and Developer Tools
    8
  • MarlKey.Peera.
    FürSuiApr 30, 2025
    Experten Q&A

    Ist die einzige Möglichkeit, Move-Pakete über eine EOA zu veröffentlichen?

    Ich gehe davon aus, dass es in der Sui-Kette keine Möglichkeit gibt, da es in der Kette kein Modul gibt, das Pakete veröffentlicht.

    • Sui
    • SDKs and Developer Tools
    • Move
    7
    3
    Beste Antwort
  • article banner.
    Arnold.Peera.
    FürSuiJun 30, 2025
    Artikel

    Wie verhindert Sui Smart Contract-Hacks?

    Smart-Contract-Hacks haben die Blockchain-Industrie geplagt. Allein im Jahr 2023 gingen aufgrund von Exploits auf Plattformen wie Ethereum über 3 Milliarden US-Dollar verloren. Sui Network, bei dessen Entwicklung Sicherheit an erster Stelle stand, führt mehrere wichtige Innovationen ein, um diese Risiken zu minimieren. Dieser Artikel befasst sich mit: 🔒 Die integrierten Sicherheitsfunktionen von Sui 💡 Wie die Move-Sprache gängige Exploits verhindert 🛡️ Vergleich mit den Sicherheitslücken von Ethereum 🚀 Warum Sui die sicherste Smart-Contract-Plattform werden könnte 1. Die Programmiersprache The Move: Ein Ansatz, bei dem Sicherheit an erster Stelle steht Sui verwendet Move, eine Sprache, die ursprünglich für die Diem-Blockchain von Facebook entwickelt wurde und speziell für die sichere Vermögensverwaltung entwickelt wurde. Die wichtigsten Sicherheitsvorteile von Move: Keine ungeprüften externen Anrufe — verhindert Wiedereintrittsangriffe (wie den 60 Millionen $ schweren DAO-Hack auf Ethereum). Strenge Tipp- und Eigentumsregeln — Vermeidet versehentliche Geldverluste aufgrund von Codierungsfehlern. Unterstützung bei der formellen Überprüfung — Ermöglicht den mathematischen Nachweis der Vertragskorrektheit. Beispiel: Bei Ethereum kann ein einfacher Tippfehler Geld verbrauchen. In Move lehnt der Compiler unsicheren Code vor der Bereitstellung ab. 2. Objektzentriertes Modell: Isolierung von Sicherheitslücken Im Gegensatz zum Shared-State-Modell von Ethereum (bei dem ein Bug viele Verträge beeinflussen kann) nutzen Suis objektbasierte Speicherlimits die Ausbreitung aus: Jeder Vermögenswert (Münze, NFT usw.) ist ein eigenständiges Objekt mit strengen Eigentumsregeln. Verträge können unabhängige Daten nicht willkürlich ändern. Auswirkung: Selbst wenn ein Vertrag kompromittiert wird, hält sich der Schaden in Grenzen, im Gegensatz zu den Zusammensetzungsrisiken von Ethereum (z. B. der Wurmhole-Bridge-Hack im Wert von 325 Millionen US-Dollar). 3. Keine „Gas Griefing“ -Attacken Auf Ethereum können Angreifer Verträge mit High-Gas-Transaktionen spammen, um legitime Nutzer zu blockieren (z. B. Denial-of-Service-Angriffe). Suis Lösung: Feste, kostengünstige Transaktionen (keine Gasauktionen). Die parallele Ausführung verhindert netzwerkweite Überlastungen. 4. On-Chain-Sicherheitsüberwachung Die Validatoren von Sui überwachen aktiv nach verdächtigen Aktivitäten: Vorabprüfungen von Transaktionen — Lehnen Sie offensichtlich böswillige Anfragen ab. Echtzeitanalysen — Kennzeichnen Sie abnormales Verhalten (z. B. plötzliche große Auszahlungen). 5. Echter Sicherheitsrekord (bisher) Sui hatte seit dem Start des Mainnets (2023) keine größeren Hacks. Ethereum nutzt monatlich durchschnittlich 2-3 große DeFi-Exploits. Fallstudie: Ein auf SUI basierender DEX (Cetus) hat Trades im Wert von über 1 Mrd. USD ohne Sicherheitsvorfälle abgewickelt — im Gegensatz zu Ethereum-DEXs, die häufig Exploits ausgesetzt sind. 6. Zukunftssicherheit: Formale Verifizierung und Audits Sui ermutigt: Formale Überprüfung — Mathematisch bewiesen, dass Verträge fehlerfrei sind. Anforderungen an mehrere Audits — Großprojekte müssen mindestens 3 Audits bestehen. Fazit: Ist Sui die sicherste Smart-Contract-Plattform? Zwar ist kein System zu 100% hacksicher, aber Suis Move-Sprache + Objektmodell und parallele Ausführung machen es heute weitaus weniger anfällig als Ethereum. Das Fazit: Für Entwickler — Move reduziert das Risiko menschlicher Fehler. Für Benutzer — Geringere Wahrscheinlichkeit, Gelder durch Exploits zu verlieren. Für Institutionen — Sicherheit auf Unternehmensebene schafft Vertrauen. **Was kommt als Nächstes? Wird Ethereum MOVE-ähnliche Funktionen übernehmen? Kann Sui seine saubere Sicherheitsbilanz beibehalten, auch wenn die Akzeptanz zunimmt?** Teile deine Gedanken unten

    • Sui
    6
  • article banner.
    harry phan.Peera.
    FürSuiApr 24, 2025
    Artikel

    Modulübergreifende Kinderverwaltung mit public_receive

    Dies ist Teil 3 der Reihe „Eltern-Kind-Objekte in Sui Move“. Manchmal sind Ihre Eltern- und Kindertypen in verschiedenen Modulen oder sogar in verschiedenen Paketen definiert. Beispielsweise könnten Sie ein generisches Warehouse-Objekt haben, das jede Art von Parcel-Objekten speichern kann. Das Warehouse-Modul möchte ein untergeordnetes Paket abrufen, aber der Flurstückstyp ist an anderer Stelle definiert. In solchen Fällen verwenden wir transfer: :public_receive, den modulübergreifenden Cousin von receive. ###receive gegen public_receive Wie wir gesehen haben, kann transfer: :receive nur in dem Modul aufgerufen werden, das T (oder einen Freund) definiert, da T: store nicht benötigt wird. Der Move-Bytecode-Verifier stellt tatsächlich sicher, dass bei jedem zu empfangenden Anruf der Typ T vom aktuellen Modul stammt. Dies ist eine Sicherheitsbeschränkung für Objekte, die nur Schlüssel enthalten. transfer: :public_receive ist eine Variante, die einen T: key+-Speicher erfordert, aber den Empfang außerhalb des Moduls von T ermöglicht. Mit anderen Worten, wenn der Objekttyp die Fähigkeit zum Speichern hat (was bedeutet, dass er im globalen Speicher frei existieren darf), dann kann jedes Modul (mit einer &mut-UID des übergeordneten Objekts) ihn mit public_receive empfangen. Dies ist perfekt für Fälle, in denen sich das Modul des Elternteils vom Modul des Kindes unterscheidet. Warum brauchen Sie ein Geschäft? Weil Store bedeutet, dass das Objekt sicher gespeichert und außerhalb seines Definitionsmoduls weitergegeben werden kann. Objekte, die nur Schlüssel enthalten, können benutzerdefinierte Invarianten haben, die das Originalmodul beim Übertragen/Empfangen erzwingen möchte. Indem Sui diese aus public_receive ausschließt, zwingt Sui die Entwickler, sie im Modul zu behandeln (wie wir bei soul-gebundenen Objekten sehen werden). Wenn ein Objekt einen Speicher hat, ist es freizügiger, und Sui ermöglicht eine generische Übertragungs-/Empfangslogik, um es extern zu verwalten. ###Beispiel: Separate Eltern- und Untermodule Lassen Sie uns das anhand eines einfachen Szenarios veranschaulichen: einem Warehouse, das Parcel-Objekte speichert. Der Flurstückstyp ist in einem eigenen Modul definiert und das Warehouse in einem anderen. Wir zeigen, wie Warehouse mithilfe von public_receive ein untergeordnetes Paket empfangen kann. 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. } } Lassen Sie uns aufschlüsseln, was in withdraw_parcel passiert: Wir rufen public_receive (&mut warehouse.id, parcel_ticket) auf. Da Parcel die Fähigkeit hat, zu speichern, ist dieser Aufruf zulässig, auch wenn wir uns nicht im Paketmodul befinden. Unter der Haube führt dies die gleiche Prüfung und Extraktion durch wie Receive, aber es ist modulübergreifend zulässig, da Store angibt, dass dies sicher ist. 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 Wir übertragen das empfangene Paket dann sofort an die Adresse des Anrufers (tx_context: :sender (ctx)). Dieser Schritt stellt sicher, dass das Paket das Lager verlässt und an den Benutzer geht, der die Auszahlung veranlasst hat. Wir hätten auch einfach Parcel von der Funktion zurückgeben können, und Sui würde es als eine Ausgabe behandeln, die der Adresse des Anrufers gehört (da es sich um eine Eingabefunktionsausgabe handelt). Eine explizite Übertragung ist ausführlicher, macht aber deutlich, was passiert (und ermöglicht es uns, alle Überprüfungen durchzuführen, bevor wir das Objekt freigeben). Warum sollte „Shop“ in das Paket aufgenommen werden? Wenn Parcel nicht speichern kann (d. h. es hat nur den Schlüssel), würde der public_receive -Aufruf in demo: :warehouse nicht kompiliert werden — Sui erzwingt, dass T Speicher für public_receive hat. In diesem Fall wären wir gezwungen, das Paket mithilfe von Receive im Paketmodul selbst abzurufen (oder eine Freundschaftsbeziehung zu nutzen), was das modulübergreifende Design erschwert. Indem wir dem Paket Speicher hinzufügen, sagen wir quasi: „Dieses Objekt kann frei bewegt und von externen Modulen empfangen werden“, was wir für ein generisches Containermuster brauchen. Muster für Funktionsaufrufe: Um diese in einer Transaktion zu verwenden, würde der Ablauf wie folgt aussehen: 1.Einzahlung (Transfer zum Objekt) :Rufen Sie transfer: :public_transfer (parcel_obj, @warehouse_id) auf, um ein Paket in ein Warehouse zu schicken. Dies kennzeichnet den Eigentümer des Pakets als das Lagerhaus. (Wir verwenden hier public_transfer, weil es sich außerhalb des Paketmoduls befindet und Parcel einen Speicher hat. Innerhalb des Paketmoduls würde auch eine einfache Übertragung funktionieren.) Abheben (zurückerhalten) :Rufen Sie später withdraw_parcel (warehouse_obj, Receiving (parcel_id,...)) auf. Die Empfangsbestätigung kann vom SDK abgerufen werden, indem die ID des Pakets und die neueste Version angegeben werden. Die Funktion ruft public_receive auf und überträgt dann das Paket an Sie. Nach dem Aufruf von withdraw_parcel hat der Besitzer des Pakets wieder eine Adresse (Ihre), es handelt sich also wieder um ein normales Objekt, das der Adresse gehört. Das Lagerhaus besitzt es nicht mehr. Modulübergreifende Überlegungen: Beachten Sie, dass das Warehouse-Modul den Pakettyp kennen musste (wir verwenden demo: :parcel: :Parcel). Das liegt daran, dass wir „Empfangen“ explizit als „Empfangen“ eingeben. Wenn Sie einen wirklich generischen Container wollten, der jede Art von Objekt aufnehmen kann, müssten Sie generische oder einen anderen Ansatz verwenden (möglicherweise dynamische Felder mit Typlöschung). In den meisten Anwendungsfällen wissen Sie jedoch, welche Arten von Kindern Sie erwarten. Warum public_receive, anstatt nur receive aufzurufen? Wenn wir transfer: :receive (&mut warehouse.id, parcel_ticket) im Warehouse-Modul versuchen würden, würde der Move-Verifier dies ablehnen, da Parcel in demo: :warehouse nicht definiert ist. Sui bietet Public_Receive als gesegnete Möglichkeit, dies zu tun, mit einer zusätzlichen Fähigkeitsprüfung (Speicherplatz erforderlich). In ähnlicher Weise hat Sui transfer vs public_transfer, freeze_object vs public_freeze_object usw., und zwar nach demselben Muster: Die public_-Versionen sind für die Verwendung außerhalb des definierenden Moduls vorgesehen und benötigen Speicher. Vergessen Sie nicht die Erlaubnis der Eltern: Selbst mit public_receive benötigen Sie immer noch die &mut warehouse.id. Wir haben sie bekommen, weil withdraw_parcel im Modul von Warehouse ist und &mut Warehouse akzeptiert. Somit kann nur jemand, der das anrufen kann (der Besitzer des Lagers), das Paket zurückziehen. Wenn das Warehouse-Modul eine solche Funktion nicht öffentlich zur Verfügung stellen würde, könnte auch niemand extern public_receive für seine untergeordneten Elemente aufrufen. Das Cross-Modul umgeht also nicht die Steuerung des übergeordneten Elements; es ermöglicht lediglich, dass der Code des Elternteils mit untergeordneten Typen funktioniert, die es nicht definiert hat. Ein Hinweis zur Speicherfähigkeit: Wenn Sie einen Objektspeicher angeben, ist er flexibler, aber etwas weniger eingeschränkt — jedes Modul mit der übergeordneten Referenz kann ihn mit public_receive abrufen. Wenn Sie die Art und Weise, wie ein Objekt abgerufen wird,einschränkenmöchten (z. B. eine benutzerdefinierte Logik erzwingen oder ein einfaches Extrahieren verhindern), können Sie es bewusst nur als Schlüssel verwenden. Wir werden uns ein Beispiel dafür mit seelengebundenen Objekten ansehen. In diesen Fällen könnten Sie eine benutzerdefinierte Empfangsfunktion implementieren, anstatt sich auf public_receive zu verlassen. Um diesen Teil zusammenzufassen: public_receive ist Ihr Freund für die Verwaltung untergeordneter Objekte, die in anderen Modulen definiert sind, solange diese Objekte die Fähigkeit zum Speichern haben. Es ermöglicht Ihnen, modulübergreifende Systeme (wie unser Lager/Paket) zu erstellen und gleichzeitig die Eigentums- und Zugriffskontrolle zu respektieren. Denken Sie nur daran, Store bei untergeordneten Typen anzugeben und public_transfer zu verwenden, wenn Sie sie von außerhalb ihres Moduls an ein übergeordnetes Objekt senden.

    • Sui
    • Architecture
    6
  • Evgeniy CRYPTOCOIN.Peera.
    FürSuiJun 30, 2025
    Experten Q&A

    Why can’t I connect my wallet to a Sui dApp?

    I’m trying to use a Sui dApp (like Tradeport, SuiSwap, or a custom platform), but my wallet won’t connect properly. Sometimes, I get no error at all—just nothing happens when I click "Connect Wallet." Other times, I see errors like: "Wallet not detected" (even though I have Sui Wallet or another wallet installed) "Connection failed: Invalid account" "Transaction rejected" before I even approve anything What I’ve tried: Refreshing the page Switching browsers (Chrome, Firefox, Brave) Checking wallet extension permissions Trying different networks (Devnet, Testnet, Mainnet) Reinstalling the wallet extension Questions: Why does this happen, and how can I fix it? Are there common mistakes users make when connecting wallets to Sui dApps? If my wallet was working before but suddenly stopped, what could be the cause?

    • Sui
    • Transaction Processing
    6
    1
    Beste Antwort
  • article banner.
    MiniBob.Peera.
    FürSuiApr 30, 2025
    Artikel

    Wie erstelle ich eine komplexe dApp auf Sui Move?

    Kurs #2: Tiefer Einblick in die Move-Programmierung — Erstellen komplexer DApps auf Sui Nachdem Sie die Grundlagen der Move-Programmierung verstanden und Ihren ersten Smart Contract implementiert haben, ist es an der Zeit, Ihre Fähigkeiten auf die nächste Stufe zu heben. In diesem Artikel werden wir untersuchen, wie Sie mithilfe von Move auf der Sui-Blockchain komplexere dezentrale Anwendungen (DApps) erstellen können. Schritt 1: Fortgeschrittene Sui Move-Konzepte beherrschen Bevor wir uns mit dem Programmieren befassen, wollen wir uns noch einmal einige erweiterte Funktionen von Move ansehen, aufgrund derer es sich hervorragend für die Erstellung sicherer und skalierbarer DApps eignet: ####1. Ressourcenorientiertes Programmieren Move behandelt digitale Ressourcen wieRessourcenund stellt sicher, dass sie nicht dupliziert, unbeabsichtigt gelöscht oder missbraucht werden können (https://docs.sui.io/learn/resource-oriented-programming). Dies wird durch strenge Eigentumsregeln und Typsicherheit erreicht. Zum Beispiel: module examples::token { use sui::object::{Self, UID}; use sui::transfer; struct Token has key, store { id: UID, value: u64, } public fun mint(ctx: &mut TxContext, value: u64): Token { Token { id: object::new(ctx), value, } } public fun transfer_token(token: Token, recipient: address) { transfer::public_transfer(token, recipient); } } In diesem Beispiel Tokenwird die Ressource sicher erstellt und übertragen. Ressourcen in Move sind standardmäßig unveränderlich, sofern sie nicht ausdrücklich als veränderbar gekennzeichnet sind, was eine zusätzliche Sicherheitsebene darstellt. ####2. Module und Verkapselung Module in Move agieren als eigenständige Funktionseinheiten, die eine bessere Organisation und Wiederverwendbarkeit ermöglichen. Sie können beispielsweise die Logik zur Token-Erstellung von der Übertragungslogik in verschiedene Module unterteilen (https://examples.sui.io/modules). Diese Modularität sorgt für saubereren Code und eine einfachere Wartung. ####3. Objektzentriertes Design UIDSui Move führt einobjektzentriertes Modellein, bei dem jede Ressource eine global eindeutige Kennung () hat. Dies ermöglicht die direkte Referenzierung und Interaktion mit Objekten, was die Verwaltung komplexer Zustandsübergänge erleichtert (https://docs.sui.io/objects). Schritt 2: Einen modularen Smart Contract schreiben Lassen Sie uns einen fortschrittlicheren intelligenten Vertrag erstellen, der diese Konzepte demonstriert. Wir werden einen einfachen NFT-Marktplatz aufbauen, auf dem Benutzer NFTs prägen und handeln können. ####Definieren Sie die NFT-Ressource Definieren Sie zunächst eine NFT-Ressource in einem Move-Modul: module examples::nft_marketplace { use sui::object::{Self, UID}; use sui::transfer; struct NFT has key, store { id: UID, name: String, price: u64, } public fun mint_nft(ctx: &mut TxContext, name: String, price: u64): NFT { NFT { id: object::new(ctx), name, price, } } public fun list_for_sale(nft: NFT, price: u64, ctx: &mut TxContext) { nft.price = price; transfer::public_transfer(nft, tx_context::sender(ctx)); } } Hier NFTenthält die Ressource Eigenschaften wie nameundprice. Die mint_nftFunktion erstellt ein neues NFT und list_for_saleermöglicht es Benutzern, ihre NFTs zum Verkauf anzubieten. ####Kompilieren und Bereitstellen Verwenden Sie die Sui CLI, um Ihren Vertrag zu kompilieren und bereitzustellen. Schreiben Sie ein Bereitstellungsskript, um diesen Prozess zu automatisieren: sui move build sui client publish --gas-budget 10000 Dadurch wird Ihr Modul gepackt und im Sui Devnet (https://docs.sui.io/cli) bereitgestellt. Schritt 3: Erstellen Sie ein React-Frontend für Ihren Marktplatz Nachdem Ihr Smart Contract implementiert ist, verbinden wir ihn mit einem React-Frontend. ####Richten Sie das Projekt ein Initialisiere ein React-Projekt, falls du es noch nicht getan hast: npx create-react-app nft-marketplace cd nft-marketplace npm install @mysten/sui.js ####Mit Sui Wallet integrieren Verwenden Sie die @mysten/sui.jsBibliothek, um mit der Sui-Blockchain zu interagieren: import { JsonRpcProvider, SuiClient } from '@mysten/sui.js'; const provider = new SuiClient({ url: 'https://fullnode.devnet.sui.io' }); async function fetchNFTs(ownerAddress) { const objects = await provider.getObjectsOwnedByAddress(ownerAddress); console.log('User NFTs:', objects); } ####NFT-Daten anzeigen Rufen Sie NFT-Daten ab und zeigen Sie sie in Ihrer React-App an: function NFTList({ ownerAddress }) { const [nfts, setNFTs] = useState([]); useEffect(() => { async function loadNFTs() { const response = await provider.getObjectsOwnedByAddress(ownerAddress); setNFTs(response.data); } loadNFTs(); }, [ownerAddress]); return ( {nfts.map((nft) => ( {nft.name} Price: {nft.price} SUI ))} ); } Schritt 4: Verbesserung von Sicherheit und Leistung ####1. Sichere Transaktionen Stellen Sie sicher, dass alle Transaktionen sowohl innerhalb als auch außerhalb der Kette validiert werden. Verwenden Sie Bibliotheken @mysten/sui.jszum Beispiel, um Transaktionsbelege zu verifizieren: async function verifyTransaction(txDigest) { const result = await provider.getTransaction({ digest: txDigest }); console.log('Transaction Verified:', result); } ####2. Optimieren Sie die Gasgebühren Arbeiten Sie mit Diensten wie* Shami Gas Station* zusammen, um gasfreie Transaktionen anzubieten und das Nutzererlebnis zu verbessern. Alternativ können Sie Transaktionen stapelweise durchführen, um die Kosten zu senken (https://docs.sui.io/gas-optimization). ####3. Nutzen Sie die Skalierbarkeit von Sui Die Architektur von Sui unterstützt einen hohen Durchsatz und eine niedrige Latenz und ist daher ideal für DApps mit starker Nutzung. Testen Sie Ihre Anwendung unter simulierten Lastbedingungen, um sicherzustellen, dass die Leistung konstant bleibt (https://performance.sui.io). Schritt 5: Testen und Debuggen Das Testen ist wichtig, um Sicherheitslücken zu vermeiden. Verwenden Sie Tools wie* Sui Explorer*, um Transaktionen zu überwachen und Probleme zu debuggen. Schreiben Sie zusätzlich Komponententests für Ihre Move-Module: #[test] fun test_mint_nft() { use sui::test_scenario; let ctx = &mut test_scenario::ctx(); let nft = examples::nft_marketplace::mint_nft(ctx, "Test NFT", 100); assert!(nft.price == 100, 0); } Führen Sie Ihre Tests mit der Sui CLI aus: sui move test Schritt 6: Mit der Community in Kontakt treten Beim Erstellen von dApps geht es nicht nur ums Programmieren, sondern auch um Zusammenarbeit. Teile deine Fortschritte auf Plattformen wie* GitHub,* Discord* oder* Twitter**. Nimm an Hackathons und Entwickler-Challenges teil, die von der Sui Foundation veranstaltet werden, um deine Fähigkeiten zu verfeinern und [Bekanntheit] zu gewinnen (https://sui.peera.ai/). Fazit Indem Sie fortschrittliche Move-Konzepte beherrschen, modulare Smart Contracts schreiben und intuitive Frontends erstellen, sind Sie auf dem besten Weg, ein kompetenter dApp-Entwickler auf der Sui-Blockchain zu werden. Denken Sie daran, der Sicherheit Priorität einzuräumen, die Leistung zu optimieren und mit der Community in Kontakt zu treten, um Ihre Wirkung zu maximieren. Seien Sie gespannt auf* Course #3*, in dem wir reale Anwendungsfälle und fortgeschrittene Techniken zur Skalierung Ihrer dApps auf Sui untersuchen werden! Wenn Sie weitere Informationen oder zusätzliche Ressourcen wünschen, können Sie uns gerne fragen!

    • Sui
    • Architecture
    • Move
    6
  • article banner.
    MiniBob.Peera.
    FürSuiApr 29, 2025
    Artikel

    Erste Schritte mit Move Learning - Kurs #1

    Egal, ob Sie ein Anfänger oder ein erfahrener Entwickler sind, diese schrittweise Anleitung hilft Ihnen zu verstehen, wie Move, eine ressourcenorientierte Programmiersprache, verwendet werden kann, um dApps auf der Sui-Blockchain zu erstellen. ###Schritt 1: Move und seine wichtigsten Funktionen verstehen Bevor wir uns mit dem Programmieren befassen, wollen wir kurz besprechen, wasMoveist und warum es einzigartig ist. Moveist eine Programmiersprache, die für das Schreiben sicherer und effizienter intelligenter Verträge entwickelt wurde. Sie führt dieressourcenorientierte Programmierung**ein, bei der digitale Ressourcen als erstklassige Ressourcen behandelt werden, um sicherzustellen, dass sie nicht versehentlich dupliziert oder gelöscht werden können. Im Gegensatz zu anderen Sprachen minimiertMoveSicherheitslücken durch Funktionen wiestatisches Tippenund robustesRessourcenmanagement. FallsMovefür Sie neu ist, empfehlen wir Ihnen, sich dasIntro to Sui Move[Video] anzusehen (https://www.youtube.com/watch?v=cJwN3IhpLnQ)by Shayan von der Sui Foundation. Dies vermittelt grundlegendes Wissen über das Sui-Netzwerk und die Rolle von Move darin. ###Schritt 2: Ihre Entwicklungsumgebung einrichten Um loszulegen, müssen Sie die erforderlichen Tools und Binärdateien installieren. Folgen Sie diesen Schritten: 1.Installieren Sie Sui Binaries Installieren Sie zunächst dieSui-Binärdateien, um sicherzustellen, dass Ihre Entwicklungsumgebung bereit ist. Die Sui CLI (Command Line Interface) ermöglicht es Ihnen, mit der Sui-Blockchain zu interagieren. Eine detaillierte Anleitung findest du in den Sui Docs. 2.Wählen Sie Ihre Plattform Je nachdem, ob Sie Windows, macOS oder Linux verwenden, folgen Sie den entsprechenden Anweisungen zur Einrichtung in der Videoserie oder der offiziellen Sui-Dokumentation. 3.Richten Sie einen VPS ein (optional) Wenn Ihr Laptop nicht leistungsstark genug ist, sollten Sie erwägen, einen Virtual Private Server (VPS) einzurichten, um die Rechenlast zu bewältigen. ###Schritt 3: Schreiben Sie Ihren Smart Contractfür den ersten Schritt Jetzt, da Ihre Umgebung bereit ist, lassen Sie uns einen einfachen intelligentenMove-Vertrag schreiben. Für dieses Tutorial kann ich empfehlen, das BeispielSweet Placezu verwenden, das vonFlash Placeinspiriert ist. 1.Ressourcen definieren Definieren Sie zunächst eine Ressource in Ihrem Move-Modul. Zum Beispiel: module examples::sweet_place { use sui::object::{Self, UID}; use sui::transfer; struct SweetPlace has key { id: UID, name: String, } public fun create_sweet_place(ctx: &mut TxContext, name: String) { let sweet_place = SweetPlace { id: object::new(ctx), name, }; transfer::public_transfer(sweet_place, tx_context::sender(ctx)); } } 2.Kompilieren und Bereitstellen Verwenden Sie die Sui CLI, um Ihren Vertrag zu kompilieren und bereitzustellen. Schreiben Sie einDeploy-Skript, um diesen Prozess zu automatisieren und später eine reibungslose Integration mit Ihrem Frontend sicherzustellen. ###Schritt 4: Aufbau des React-Frontend Nachdem Ihr Smart Contract implementiert ist, ist es an der Zeit, ihn mit einemReact-Frontendzu verbinden. Bei diesem Schritt wird davon ausgegangen, dass Sie bereits Erfahrung mit React haben. Wenn nicht, schauen Sie sich denReact-Anfänger-Kursvon [freeCodeCamp.org] an (https://www.freecodecamp.org/). 1.Richten Sie das Projekt ein Initialisieren Sie ein React-Projekt mit create-react-appoder einem beliebigen Framework Ihrer Wahl. 2.In Sui Wallet integrieren Verwenden Sie Bibliotheken, um mit der @mysten/sui.jsSui-Blockchain zu interagieren. Zum Beispiel: import { JsonRpcProvider } from '@mysten/sui.js'; const provider = new JsonRpcProvider('https://fullnode.devnet.sui.io'); 3.Daten aus Ihrem Vertrag abrufen Fragen Sie Daten aus Ihrem bereitgestellten Move-Vertrag ab und zeigen Sie sie in Ihrer React-App an. Verwenden Sie einenIndexer, um Transaktionen und Statusänderungen effizient zu verfolgen. ###Schritt 5: Verbesserung der Benutzererfahrung (UX) Eines der herausragenden Merkmale dieses Tutorials ist der Schwerpunkt auf der Schaffung einer nahtlosen Benutzererfahrung. So können Sie UX verbessern: 1.Integrieren Sie gaslose Transaktionen Arbeiten Sie mit Diensten wieShami Gas Stationzusammen, um Ihren Nutzern gaslose Transaktionen zu ermöglichen. Dadurch werden Hindernisse für Neueinsteiger beseitigt, die mit den Gebühren für Kryptowährungen nicht vertraut sind. 2.Leistung optimieren Nutzen Sie den hohen Durchsatz und die niedrige Latenz von Sui, um sicherzustellen, dass Ihre DApp auch unter hoher Last reibungslos funktioniert. ###Schritt 6: Testen und Debuggen Das Testen ist entscheidend, um sicherzustellen, dass Ihre Anwendung wie erwartet funktioniert. Verwenden Sie Tools wie denSui Explorer, um Transaktionen zu verifizieren und Probleme zu debuggen [[Web Search]]. Besuchen Sie außerdem dieMOVE eLearning-Plattform, um Einblicke in bewährte Verfahren für Tests und Messungen zu erhalten. ###Schritt 7: Engagieren Sie sich mit der Community Und vergessen Sie nicht, mit derSui-Communityin Kontakt zu treten! Teile deine Fortschritte, stelle Fragen und arbeite mit anderen zusammen. Wie im Video-Transkript hervorgehoben, kann die Vernetzung mit anderen Entwicklern zu aufregenden Möglichkeiten führen.

    • Sui
    • Architecture
    • SDKs and Developer Tools
    • Move
    6
  • Evgeniy CRYPTOCOIN.Peera.
    FürSuiJun 26, 2025
    Experten Q&A

    How to Properly Use the Sui SDK for Frontend Integration?

    I'm building a frontend (React/Next.js) for a Sui dApp and need to interact with the blockchain—fetching objects, sending transactions, and listening to events. I’ve tried using the @mysten/sui.js SDK, but I’m running into issues: Wallet Connection: Sometimes, the wallet doesn’t return the user’s address after connecting. Transaction Handling: Transactions fail silently or return vague errors. RPC Limits: I get rate-limited or timeouts when fetching large datasets. Real-Time Updates: How can I listen for on-chain events (e.g., NFT mints, balance changes)? What I’ve tried: ✔ Basic SuiClient setup with mainnet and testnet RPCs. ✔ Using useWallet() from @mysten/dapp-kit for wallet integration. ✔ Manual transaction signing with signAndExecuteTransactionBlock. Questions: What’s the recommended way to initialize the Sui SDK in a frontend app? How do I handle errors gracefully (e.g., RPC failures, wallet rejections)? Are there best practices for optimizing queries (batching, caching, etc.)? How can I subscribe to real-time updates (e.g., new transactions, object changes)?

    • Sui
    • SDKs and Developer Tools
    6
    2
    Beste Antwort
  • MiniBob.Peera.
    FürSuiApr 28, 2025
    Experten Q&A

    Wie verbessern Sui Move-Module die Sicherheit intelligenter Verträge?

    Wie ermöglicht das Modulsystem von Sui Move Entwicklern, benutzerdefinierte On-Chain-Objekte zu definieren, zu organisieren und sicher mit ihnen zu interagieren, und was sind die einzigartigen Merkmale der Modulidentifikation und Objektspeicherung im Sui-Ökosystem im Vergleich zu herkömmlichen intelligenten Vertragssprachen?

    • Sui
    • Architecture
    • Security Protocols
    • Move
    6
    1
    Beste Antwort