Przejdź do treści

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ć

  1. Wklej kontrakt Cadence do edytora typów Cadence; zachowaj blok kontraktu wydawniczego najwyższego poziomu, ponieważ struktury poza kontraktem są odrzucane.
  2. 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.
  3. 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.

Specyfikacje i referencje