// Copyright (c) 2017-2026 Lethean (https://lt.hn) // // Licensed under the European Union Public Licence (EUPL) version 1.2. // SPDX-License-Identifier: EUPL-1.2 package rpc import ( "fmt" coreerr "dappco.re/go/core/log" ) // SubmitBlock submits a mined block to the daemon. // The hexBlob is the hex-encoded serialised block. // Note: submitblock takes a JSON array as params, not an object. func (c *Client) SubmitBlock(hexBlob string) error { // submitblock expects params as an array: ["hexblob"] params := []string{hexBlob} var resp struct { Status string `json:"status"` } if err := c.call("submitblock", params, &resp); err != nil { return err } if resp.Status != "OK" { return coreerr.E("Client.SubmitBlock", fmt.Sprintf("submitblock: status %q", resp.Status), nil) } return nil } // BlockTemplateResponse is the daemon's response to getblocktemplate. type BlockTemplateResponse struct { Difficulty string `json:"difficulty"` Height uint64 `json:"height"` BlockTemplateBlob string `json:"blocktemplate_blob"` PrevHash string `json:"prev_hash"` BlockRewardWithoutFee uint64 `json:"block_reward_without_fee"` BlockReward uint64 `json:"block_reward"` TxsFee uint64 `json:"txs_fee"` Status string `json:"status"` } // GetBlockTemplate requests a block template from the daemon for mining. func (c *Client) GetBlockTemplate(walletAddr string) (*BlockTemplateResponse, error) { params := struct { WalletAddress string `json:"wallet_address"` }{WalletAddress: walletAddr} var resp BlockTemplateResponse if err := c.call("getblocktemplate", params, &resp); err != nil { return nil, err } if resp.Status != "OK" { return nil, coreerr.E("Client.GetBlockTemplate", fmt.Sprintf("getblocktemplate: status %q", resp.Status), nil) } return &resp, nil }