Konwerter Cadence na kod Go — Numio
Generuje struktury Go na podstawie struktur, zasobów i zdarzeń w kontrakcie Flow Cadence, używając narzędzia easi-gen skompilowanego do WebAssembly. Pola otrzymują znaczniki `godence:"..."` dla kodera godence; typy opcjonalne, takie jak String? stać się ich zwykłym typem Go.
Dekodowanie wyników skryptu lub zdarzeń kontraktowych z łańcucha bloków Flow w backendzie Go, który wykorzystuje flow-go-sdk i godence.
Cadence types
Go types
Kiedy go używać
- Dekodowanie wyników skryptu lub zdarzeń kontraktowych z łańcucha bloków Flow w backendzie Go, który wykorzystuje flow-go-sdk i godence.
- Generowanie wpisanego klienta Go z funkcjami zapytań dla funkcji publicznych kontraktu zamiast ręcznego pisania skryptów.
Jak używać
- Wklej kontrakt Cadence do edytora typów Cadence; zachowaj blok kontraktu wydawniczego najwyższego poziomu, ponieważ struktury poza kontraktem są odrzucane.
- Opcjonalnie otwórz ustawienia wyniku i włącz „Generuj kod interakcji z funkcjami”, aby otrzymać również nagłówek pakietu, importy, typ ContractX i jedną metodę Go dla każdej funkcji pub fun.
- Skopiuj panel typów Go do swojego projektu i dodaj import godence; import „math/big” jest dodawany automatycznie, gdy pole używa *big.Int.
Umowa na kadencję
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)
}Przejdź do struktur
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"`
}Szczegóły i ograniczenia
Generowanie odbywa się w całości w przeglądarce. Moduł easi-gen WebAssembly jest pobierany przy pierwszym użyciu, dlatego pierwsza konwersja może trwać dłużej. Dane wejściowe nie są wysyłane na serwer.
Nazwy są poprzedzone rodzajem: StructListing, ResourceNFT, EventSold. Nazwy pól są pisane wielką literą, a oryginalna nazwa Cadence jest przechowywana w znaczniku godence.
Praktyczne mapowanie typów: UInt64 na uint64, Int8 na int8, Int na *big.Int, UFix64 na uint64, Fix64 na int64, Address na string, [T;2] na [2]T, {K:V} na map[K]V.
Przy ustawieniu domyślnym tworzone są tylko deklaracje typów, bez linii pakietu, a treści pubowe są ignorowane. Jedynym dodanym importem jest „math/big”, gdy pole Int wymaga *big.Int.
FAQ
Dlaczego pojawia się komunikat "no top level contract found"?
Generator odczytuje tylko deklaracje zawarte w kontrakcie wydawniczym, więc samodzielne struktury są wyświetlane jako ten błąd. Zawiń je w blok kontraktu, na przykład kontrakt pubowy. Przykład { ... }, tak jak w domyślnym przykładzie edytora.
Jak obsługiwane są typy opcjonalne?
Znacznik opcjonalności jest usuwany: String? staje się string, a funkcja zwracająca Listing? jest mapowana na StructListing. Samodzielnie sprawdzaj brakujące wartości, ponieważ wynik nil dekoduje się do wartości zerowej.
Co dodaje „Generuj kod interakcji z funkcjami”?
Dodaje linie pakietu i importu, typ ContractName z konstruktorem sprawdzającym adres kontraktu oraz metodę dla każdej funkcji publicznej, która buduje skrypt Cadence, uruchamia ExecuteScriptAtLatestBlock i dekoduje wynik za pomocą godence.
Czy obsługiwane są zagnieżdżone struktury i tablice wielowymiarowe?
Tak. Struktura zadeklarowana wewnątrz innej staje się własnym typem Go, [[String]] staje się [][]stringiem, a zagnieżdżone słowniki stają się zagnieżdżonymi mapami, takimi jak map[string]map[string]string.