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
- 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.
- 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.
- 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.