// VulcanizeDB // Copyright © 2019 Vulcanize // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . package ipld import ( "github.com/ipfs/go-cid" mh "github.com/multiformats/go-multihash" ) // IPLD Codecs for Ethereum // See the authoritative document: // https://github.com/multiformats/multicodec/blob/master/table.csv const ( RawBinary = 0x55 MEthHeader = 0x90 MEthHeaderList = 0x91 MEthTxTrie = 0x92 MEthTx = 0x93 MEthTxReceiptTrie = 0x94 MEthTxReceipt = 0x95 MEthStateTrie = 0x96 MEthAccountSnapshot = 0x97 MEthStorageTrie = 0x98 MEthLogTrie = 0x99 MEthLog = 0x9a MEthWithdrawal = 0x9b // TODO add to multicodec registry ) // RawdataToCid takes the desired codec and a slice of bytes // and returns the proper cid of the object. func RawdataToCid(codec uint64, rawdata []byte, multiHash uint64) (cid.Cid, error) { c, err := cid.Prefix{ Codec: codec, Version: 1, MhType: multiHash, MhLength: -1, }.Sum(rawdata) if err != nil { return cid.Cid{}, err } return c, nil } // Keccak256ToCid takes a keccak256 hash and returns its cid based on // the codec given. func Keccak256ToCid(codec uint64, h []byte) cid.Cid { buf, err := mh.Encode(h, mh.KECCAK_256) if err != nil { panic(err) } return cid.NewCidV1(codec, buf) }