You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
2.4 KiB

  1. // Copyright 2017-2018 DERO Project. All rights reserved.
  2. // Use of this source code in any form is governed by RESEARCH license.
  3. // license can be found in the LICENSE file.
  4. // GPG: 0F39 E425 8C65 3947 702A 8234 08B2 0360 A03A 9DE8
  5. //
  6. //
  7. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
  8. // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  9. // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
  10. // THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  11. // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  12. // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  13. // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  14. // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
  15. // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  16. package blockchain
  17. //import "fmt"
  18. import "github.com/arnaucode/derosuite/crypto"
  19. // this is used to print blockheader for the rpc and the daemon
  20. type BlockHeader_Print struct {
  21. Depth uint64 `json:"depth"`
  22. Difficulty uint64 `json:"difficulty"`
  23. Hash string `json:"hash"`
  24. Height uint64 `json:"height"`
  25. Major_Version uint64 `json:"major_version"`
  26. Minor_Version uint64 `json:"minor_version"`
  27. Nonce uint64 `json:"nonce"`
  28. Orphan_Status bool `json:"orphan_status"`
  29. Reward uint64 `json:"reward"`
  30. Prev_Hash string `json:"prev_hash"`
  31. Timestamp uint64 `json:"timestamp"`
  32. }
  33. /* fill up the above structure from the blockchain */
  34. func (chain *Blockchain) GetBlockHeader(hash crypto.Hash) (result BlockHeader_Print, err error) {
  35. bl, err := chain.Load_BL_FROM_ID(hash)
  36. if err != nil {
  37. return
  38. }
  39. result.Height = chain.Load_Height_for_BL_ID(hash)
  40. result.Depth = chain.Get_Height() - result.Height - 1
  41. result.Difficulty = chain.Get_Difficulty_At_Block(hash)
  42. result.Hash = hash.String()
  43. result.Height = chain.Load_Height_for_BL_ID(hash)
  44. result.Major_Version = uint64(bl.Major_Version)
  45. result.Minor_Version = uint64(bl.Minor_Version)
  46. result.Nonce = uint64(bl.Nonce)
  47. result.Orphan_Status = chain.Is_Block_Orphan(hash)
  48. result.Reward = chain.Load_Block_Reward(hash)
  49. result.Prev_Hash = bl.Prev_Hash.String()
  50. result.Timestamp = bl.Timestamp
  51. return
  52. }