Naar de inhoud

Cadence naar Go-code omzetten — Numio

Genereert Go-structuren uit de structuren, bronnen en gebeurtenissen in een Flow Cadence-contract, met behulp van easi-gen gecompileerd naar WebAssembly. Velden krijgen `godence:"..."`-tags voor de godence-encoder; optionele typen zoals String? word hun gewone Go-type.

Het decoderen van scriptresultaten of contractgebeurtenissen van de Flow blockchain in een Go-backend die gebruik maakt van flow-go-sdk en godence.

Cadence types

Go types

Wanneer gebruik je dit?

  • Het decoderen van scriptresultaten of contractgebeurtenissen van de Flow blockchain in een Go-backend die gebruik maakt van flow-go-sdk en godence.
  • Het genereren van een getypte Go-client met queryfuncties voor de openbare functies van een contract in plaats van met de hand scripts te schrijven.

Hoe werkt het

  1. Plak een Cadence-contract in de editor voor Cadence-typen. Behoud het pub contract-blok op het hoogste niveau; structs buiten een contract worden afgewezen.
  2. Open eventueel Uitvoerinstellingen en schakel "Genereer interactiecode met functies" in om ook een pakketkop, imports, een ContractX-type en één Go-methode per pubplezier te krijgen.
  3. Kopieer het Go-typenpaneel naar uw project en voeg de godence-import toe; import "math/big" wordt automatisch toegevoegd als een veld *big.Int gebruikt.

Cadence-contract

pub contract Marketplace {
  pub struct Listing {
    pub let id: UInt64
    pub let seller: Address
    pub var price: UFix64
    pub var tags: [String]
    pub var meta: {String: String}
    pub var note: String?

    init() { self.id = 0; self.seller = 0x01; self.price = 0.0; self.tags = []; self.meta = {}; self.note = nil }
  }

  pub event Sold(id: UInt64, buyer: Address)
}

Go-structs

type StructListing struct {
	Id     uint64            `godence:"id"`
	Seller string            `godence:"seller"`
	Price  uint64            `godence:"price"`
	Tags   []string          `godence:"tags"`
	Meta   map[string]string `godence:"meta"`
	Note   string            `godence:"note"`
}

type EventSold struct {
	Id    uint64 `godence:"id"`
	Buyer string `godence:"buyer"`
}

Details en beperkingen

De generatie gebeurt volledig in je browser. De pagina laadt de easi-gen WebAssembly-module en je invoer wordt niet naar een server verstuurd. Het laden van de runtime bij het eerste gebruik kan tijd kosten.

Namen krijgen een voorvoegsel per soort: StructListing, ResourceNFT en EventSold. Veldnamen beginnen met een hoofdletter en de oorspronkelijke Cadence-naam blijft bewaard in de godence-tag.

Type mapping in de praktijk: UInt64 naar uint64, Int8 naar int8, Int naar *big.Int, UFix64 naar uint64, Fix64 naar int64, Adres naar string, [T;2] naar [2]T, {K:V} naar map[K]V.

Met de standaardinstelling worden alleen typedeclaraties geproduceerd, zonder pakketregel, en worden pubfun-teksten genegeerd. De enige toegevoegde import is "math/big", wanneer een Int-veld *big.Int nodig heeft.

FAQ

Waarom krijg ik de melding "geen topcontract gevonden"?

De generator leest alleen declaraties binnen een pubcontract, dus zelfstandige structuren worden als deze fout weergegeven. Verpak ze in een contractblok, bijvoorbeeld cafécontract Voorbeeld { ... }, zoals in het standaardvoorbeeld van de editor.

Hoe worden optionele typen verwerkt?

De optionele markering wordt verwijderd: String? wordt string, en een functie die Listing retourneert? wordt toegewezen aan StructListing. Controleer zelf op ontbrekende waarden, aangezien een nulresultaat wordt gedecodeerd naar een nulwaarde.

Wat voegt "Genereer interactiecode met functies" toe?

Het voegt pakket- en importregels toe, een ContractName-type met een constructor die het contractadres controleert, en een methode per publieke functie die een Cadence-script bouwt, ExecuteScriptAtLatestBlock uitvoert en het resultaat decodeert met godence.

Worden geneste structuren en multidimensionale arrays ondersteund?

Ja. Een struct die in een andere is gedeclareerd, wordt zijn eigen Go-type, [[String]] wordt [][]string, en geneste woordenboeken worden geneste kaarten zoals map[string]map[string]string.

Specificaties en referenties