github.com/bytom/bytom@v1.1.2-0.20221014091027-bbcba3df6075/protocol/bc/asset_test.go (about) 1 package bc 2 3 import ( 4 "encoding/hex" 5 "testing" 6 7 "golang.org/x/crypto/sha3" 8 ) 9 10 func TestComputeAssetID(t *testing.T) { 11 issuanceScript := []byte{1} 12 assetID := ComputeAssetID(issuanceScript, 1, &EmptyStringHash) 13 14 unhashed := append([]byte{}) 15 unhashed = append(unhashed, []byte{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}...) // vmVersion 16 unhashed = append(unhashed, 0x01) // length of issuanceScript 17 unhashed = append(unhashed, issuanceScript...) 18 unhashed = append(unhashed, EmptyStringHash.Bytes()...) 19 20 if want := NewAssetID(sha3.Sum256(unhashed)); assetID != want { 21 t.Errorf("asset id = %x want %x", assetID.Bytes(), want.Bytes()) 22 } 23 } 24 25 func TestComputeAssetIDReally(t *testing.T) { 26 cases := []struct { 27 program string 28 rawDefinition string 29 wantAssetID string 30 }{ 31 { 32 program: "ae2039294f652632eee970765550c245f0b0314256b4b93aadc86279fdb45db3b70e5151ad", 33 rawDefinition: "7b0a202022646563696d616c73223a20382c0a2020226465736372697074696f6e223a207b7d2c0a2020226e616d65223a2022222c0a20202273796d626f6c223a2022220a7d", 34 wantAssetID: "07c7ced3f37f48ea39da6971c89f90e9cff3202d54b0a911f12ace8501f3834e", 35 }, 36 { 37 program: "ae20620b1755451738b04f42822f4b37186563f824c9c30d485987298918f96395fe5151ad", 38 rawDefinition: "7b0a202022646563696d616c73223a20382c0a2020226465736372697074696f6e223a207b7d2c0a2020226e616d65223a2022222c0a20202273796d6f626f6c223a2022220a7d", 39 wantAssetID: "0dafd0f0e42f06f3bf9a8cf5787519d3860650f27a2b3393d34e1fe06e89b469", 40 }, 41 { 42 program: "ae20db11f9dfa39c9e66421c530fe027218edd3d5b1cd98f24c826f4d9c0cd131a475151ad", 43 rawDefinition: "7b0a202022646563696d616c73223a20382c0a2020226465736372697074696f6e223a207b7d2c0a2020226e616d65223a2022222c0a20202273796d626f6c223a2022220a7d", 44 wantAssetID: "a5bc30d8d0ad051e6e352ebc21d79ba798cd8c436e89f4149969c2c562371791", 45 }, 46 } 47 48 for _, c := range cases { 49 progBytes, err := hex.DecodeString(c.program) 50 if err != nil { 51 t.Fatal(err) 52 } 53 54 defBytes, err := hex.DecodeString(c.rawDefinition) 55 if err != nil { 56 t.Fatal(err) 57 } 58 59 defHash := NewHash(sha3.Sum256(defBytes)) 60 assetID := ComputeAssetID(progBytes, 1, &defHash) 61 if assetID.String() != c.wantAssetID { 62 t.Errorf("got asset id:%s, want asset id:%s", assetID.String(), c.wantAssetID) 63 } 64 } 65 }