How to interact with smart contract in GO?

0 votes
I’m modifying go-ethereum for a particular function in my application. I am writing a contract to give rewards to miners if a certain condition is met. For this, I need to change the go-ethereum to call a function that gives out reward to miners.  So I wanted to know how to build a Raw transaction in Go to call the reward function.  Can someone help me out with this?
Jul 26, 2018 in Blockchain by slayer
• 29,040 points
60 views

1 answer to this question.

Your answer

Your name to display (optional):
Privacy: Your email address will only be used for sending these notifications.
0 votes

I am providing an example. Modify it according to your requirement.

store.sol

pragma solidity ^0.4.24;

contract Store {

  event ItemSet(bytes32 key, bytes32 value);

  string public version;

  mapping (bytes32 => bytes32) public items;

  constructor(string _version) public {

    version = _version;

  }

  function setItem(bytes32 key, bytes32 value) external {

    items[key] = value;

    emit ItemSet(key, value);

  }

}

main.go

package main

import (

    "context"

    "crypto/ecdsa"

    "fmt"

    "log"

    "math/big"

    "github.com/ethereum/go-ethereum/accounts/abi/bind"

    "github.com/ethereum/go-ethereum/common"

    "github.com/ethereum/go-ethereum/crypto"

    "github.com/ethereum/go-ethereum/ethclient"

    store "./contracts" // for demo

)

func main() {

    client, err := ethclient.Dial("https://rinkeby.infura.io")

    if err != nil {

        log.Fatal(err)

    }

    privateKey, err := crypto.HexToECDSA("fad9c8855b740a0b7ed4c221dbad0f33a83a49cad6b3fe8d5817ac83d38b6a19")

    if err != nil {

        log.Fatal(err)

    }

    publicKey := privateKey.Public()

    publicKeyECDSA, ok := publicKey.(*ecdsa.PublicKey)

    if !ok {

        log.Fatal("error casting public key to ECDSA")

    }

    fromAddress := crypto.PubkeyToAddress(*publicKeyECDSA)

    nonce, err := client.PendingNonceAt(context.Background(), fromAddress)

    if err != nil {

        log.Fatal(err)

    }

    gasPrice, err := client.SuggestGasPrice(context.Background())

    if err != nil {

        log.Fatal(err)

    }

    auth := bind.NewKeyedTransactor(privateKey)

    auth.Nonce = big.NewInt(int64(nonce))

    auth.Value = big.NewInt(0)     // in wei

    auth.GasLimit = uint64(300000) // in units

    auth.GasPrice = gasPrice

    address := common.HexToAddress("0x147B8eb97fD247D06C4006D269c90C1908Fb5D54")

    instance, err := store.NewStore(address, client)

    if err != nil {

        log.Fatal(err)

    }

    key := [32]byte{}

    value := [32]byte{}

    copy(key[:], []byte("foo"))

    copy(value[:], []byte("bar"))

    tx, err := instance.SetItem(auth, key, value)

    if err != nil {

        log.Fatal(err)

    }

    fmt.Printf("tx sent: %s", tx.Hash().Hex()) // tx sent: 0x8d490e535678e9a24360e955d75b27ad307bdfb97a1dca51d0f3035dcee3e870

    result, err := instance.Items(&bind.CallOpts{}, key)

    if err != nil {

        log.Fatal(err)

    }

    fmt.Println(string(result[:])) // "bar"

}

answered Jul 26, 2018 by digger
• 27,620 points

Related Questions In Blockchain

0 votes
1 answer
+1 vote
1 answer

How can nodes interact with a Smart Contract?

If you are using Remix IDE to ...READ MORE

answered Apr 27, 2018 in Blockchain by Perry
• 16,450 points
18 views
0 votes
1 answer

How do I send back ethers to the sender of the tokens in a smart contract?

Whenever a smart contract receives ether via ...READ MORE

answered May 30, 2018 in Blockchain by Perry
• 16,450 points
180 views
0 votes
1 answer

How to prevent the smart contract from being modified and deployed in the blockchain network?

To expand on Matthew's answer, each state ...READ MORE

answered Jul 5, 2018 in Blockchain by ariaholic
• 7,320 points
30 views
0 votes
1 answer
0 votes
1 answer

Truffle tests not running after truffle init

This was a bug. They've fixed it. ...READ MORE

answered Sep 11, 2018 in Blockchain by Christine
• 15,790 points
63 views
+1 vote
5 answers

Where does the smart contracts stored and executed on blockchain?

Ethereum smart contracts are executed on EVM ...READ MORE

answered May 2, 2018 in Blockchain by Shashank
• 10,330 points
451 views
0 votes
1 answer

How to use real world/live data in my smart contract?

You cant access/embed real world data using ...READ MORE

answered Jul 12, 2018 in Blockchain by digger
• 27,620 points
43 views
0 votes
1 answer

How are the ethers sent to smart contract in the IBM example?

They are in magical variable msg. The function ...READ MORE

answered Sep 28, 2018 in Blockchain by digger
• 27,620 points
9 views

© 2018 Brain4ce Education Solutions Pvt. Ltd. All rights Reserved.
"PMP®","PMI®", "PMI-ACP®" and "PMBOK®" are registered marks of the Project Management Institute, Inc. MongoDB®, Mongo and the leaf logo are the registered trademarks of MongoDB, Inc.