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.
