(⌐■_■)

Det er noen besvergelser for å få en .sol kontrakt klar for deploy i en Go-app. Man kan klone git-repoet på remix.ethereum.org og kompilere kontrakten der, men jeg må nesten skjønne hvordan jeg skal klare å få deployet den på blokkjeden og kalt den i appen. Denne ressursen har en step-by-step: https://goethereumbook.org/smart-contract-compile/

Du begynner med en .sol fil, jeg fikk chatGPT til å lage en kontrakt som kan mappe en id til et versjonsnummer, hente versjonsnummeret til en id, og emitte et event når en id blir oppdatert med ny versjon:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract VersionControl {
    // Event emitted whenever an item's version is updated
    event VersionUpdated(bytes32 indexed itemId, uint256 newVersion);

    // Mapping of item IDs to their current version number
    mapping(bytes32 => uint256) public itemVersions;

    // Function to update the version of an item
    function updateVersion(bytes32 itemId, uint256 newVersion) public {
        // Here, you could add access control checks
        
        // Update the item's version
        itemVersions[itemId] = newVersion;

        // Emit an event indicating the version update
        emit VersionUpdated(itemId, newVersion);
    }

    // Function to get the current version of an item
    // This function is view-only and does not incur gas fees
    function getVersion(bytes32 itemId) public view returns (uint256) {
        return itemVersions[itemId];
    }
}

Fila heter hashHandler.sol.

Målet vårt er to ting: 1) Generere .go som lar oss kalle metodene i kontrakten fra appen, og 2) Kompilere kontrakten til “EVM bytecode” som skal i data-feltet på transaksjonen når vi deployer den til blokkjeden.

Vi trenger to verktøy for å få til dette, solc og abigen. Begge er laget for Linux, så hvis du er på Windows er det aller enkleste å deale med dem i WSL.

Filene: hashHandler.sol ➡️ hashHandler.abi ➡️ hashHandler.go

Du bruker solc for å generere en ABI (“application binary interface”) fra kontrakten. ABI-en bare en JSON. Hvis du ser på nærmere byggrasket i Remix baker de ABI’en inn i en JSON. Hos oss skal den ha extension .abi.

Gå inn i mappa der kontrakten ligger og si:

> solc --abi hashHandler.sol

Det outputtes en JSON-struktur i konsollet. Kopier den, lag ny fil hashHandler.abi (eller tilsvarende din kontrakt) og lim inn. Fra denne får vi generert .go-en:

> abigen --abi=hashHandler.abi --pkg=hashhandler --out=hashHandler.go

Men uten deploy methods, for vi har ikke lagt til EVM bytecoden. Generer den med:

> solc --bin hashHandler.sol

Det outputtes binary som du kan lime inn i ny fil hashHandler.bin. Da kan du si:

> abigen --bin=hashHandler.bin --abi=hashHandler.abi --pkg=hashhandler --out=hashHandler.go

Vi har nå fått en programfil fra .sol kontrakten som kan deployes og kalles.