Skip to content

Commit

Permalink
Merge pull request #69 from Zilliqa/develop
Browse files Browse the repository at this point in the history
Merge from develop
  • Loading branch information
renlulu committed Aug 3, 2020
2 parents 2cc69c1 + 29f90f2 commit cb75605
Show file tree
Hide file tree
Showing 8 changed files with 203 additions and 116 deletions.
35 changes: 34 additions & 1 deletion account/wallet_test.go
Expand Up @@ -29,6 +29,37 @@ import (
"testing"
)

func TestPayload(t *testing.T) {
if os.Getenv("CI") != "" {
t.Skip("Skipping testing in CI environment")
}
wallet := NewWallet()
wallet.AddByPrivateKey("e19d05c5452598e24caad4a0d85a49146f7be089515c905ae6a19e8a578a6930")
provider := provider2.NewProvider("https://dev-api.zilliqa.com/")

gasPrice, err := provider.GetMinimumGasPrice()
assert.Nil(t, err, err)

tx := &transaction.Transaction{
Version: strconv.FormatInt(int64(util.Pack(333, 1)), 10),
SenderPubKey: "0246E7178DC8253201101E18FD6F6EB9972451D121FC57AA2A06DD5C111E58DC6A",
ToAddr: "4BAF5faDA8e5Db92C3d3242618c5B47133AE003C",
Amount: "10000000",
GasPrice: gasPrice,
GasLimit: "1",
Code: "",
Data: "",
Priority: false,
}
err2 := wallet.Sign(tx, *provider)
assert.Nil(t, err2, err2)

pl := tx.ToTransactionPayload()
payloadJson, err3 := pl.ToJson()
assert.Nil(t, err3, err3)
fmt.Println(string(payloadJson))
}

func TestWallet_SignWith(t *testing.T) {
if os.Getenv("CI") != "" {
t.Skip("Skipping testing in CI environment")
Expand Down Expand Up @@ -69,10 +100,12 @@ func TestSendTransaction(t *testing.T) {
Data: "",
Priority: false,
}

err2 := wallet.Sign(tx, *provider)
assert.Nil(t, err2, err2)

h, _ := tx.Hash()
fmt.Println("local transaction hash: ", util.EncodeHex(h))

rsp, err3 := provider.CreateTransaction(tx.ToTransactionPayload())
assert.Nil(t, err3, err3)
assert.Nil(t, rsp.Error, rsp.Error)
Expand Down
1 change: 0 additions & 1 deletion contract/contract.go
Expand Up @@ -164,7 +164,6 @@ func (c *Contract) Call(transition string, args []core.ContractValue, params Cal
if err2 != nil {
return tx, err2
}

rsp, err := c.Provider.CreateTransaction(tx.ToTransactionPayload())

if err != nil {
Expand Down
1 change: 0 additions & 1 deletion contract/contract_test.go
Expand Up @@ -113,7 +113,6 @@ func TestContract_Call(t *testing.T) {
privateKey := "e19d05c5452598e24caad4a0d85a49146f7be089515c905ae6a19e8a578a6930"
chainID := 333
msgVersion := 1

publickKey := keytools.GetPublicKeyFromPrivateKey(util.DecodeHex(privateKey), true)
address := keytools.GetAddressFromPublic(publickKey)
pubkey := util.EncodeHex(publickKey)
Expand Down
8 changes: 4 additions & 4 deletions core/types.go
Expand Up @@ -140,10 +140,10 @@ type Transition struct {
}

type TransactionMessage struct {
Amount string `json:"_amount"`
Receipt string `json:"_receipt"`
Tag string `json:"_tag"`
Params []ContractValue `json:"params"`
Amount string `json:"_amount"`
Recipient string `json:"_recipient"`
Tag string `json:"_tag"`
Params []ContractValue `json:"params"`
}

type Transactions struct {
Expand Down
90 changes: 61 additions & 29 deletions provider/transaction_payload.go
Expand Up @@ -51,11 +51,11 @@ type Data struct {
}

type payload struct {
Version int `json:"version"`
Nonce int `json:"nonce"`
ToAddr string `json:"toAddr"`
Amount int64 `json:"amount"`
//PubKey string `json:"pubKey"`
Version int `json:"version"`
Nonce int `json:"nonce"`
ToAddr string `json:"toAddr"`
Amount int64 `json:"amount"`
PubKey string `json:"pubKey"`
GasPrice int64 `json:"gasPrice"`
GasLimit int64 `json:"gasLimit"`
Code string `json:"code"`
Expand All @@ -65,18 +65,31 @@ type payload struct {
}

type Init struct {
Version int `json:"version"`
Nonce int `json:"nonce"`
ToAddr string `json:"toAddr"`
Amount int64 `json:"amount"`
//PubKey string `json:"pubKey"`
Version int `json:"version"`
Nonce int `json:"nonce"`
ToAddr string `json:"toAddr"`
Amount int64 `json:"amount"`
PubKey string `json:"pubKey"`
GasPrice int64 `json:"gasPrice"`
GasLimit int64 `json:"gasLimit"`
Code string `json:"code"`
Data []interface{} `json:"data"`
Signature string `json:"signature"`
}

type Payment struct {
Version int `json:"version"`
Nonce int `json:"nonce"`
ToAddr string `json:"toAddr"`
Amount int64 `json:"amount"`
PubKey string `json:"pubKey"`
GasPrice int64 `json:"gasPrice"`
GasLimit int64 `json:"gasLimit"`
Code string `json:"code"`
Data string `json:"data"`
Signature string `json:"signature"`
}

func (pl *TransactionPayload) ToJson() ([]byte, error) {
a, err := strconv.ParseInt(pl.Amount, 10, 64)
if err != nil {
Expand All @@ -93,6 +106,23 @@ func (pl *TransactionPayload) ToJson() ([]byte, error) {
return nil, err3
}

if pl.Data == "" {
p := Payment{
Version: pl.Version,
Nonce: pl.Nonce,
ToAddr: pl.ToAddr,
Amount: a,
PubKey: pl.PubKey,
GasPrice: price,
GasLimit: limit,
Code: pl.Code,
Data: "",
Signature: pl.Signature,
//Priority: pl.Priority,
}
return json.Marshal(&p)
}

originData := strings.TrimPrefix(pl.Data, `"`)
originData = strings.TrimSuffix(originData, `"`)
originData = strings.ReplaceAll(originData, "\\", "")
Expand All @@ -106,11 +136,11 @@ func (pl *TransactionPayload) ToJson() ([]byte, error) {
return nil, errors.New("wrong data")
} else {
p := Init{
Version: pl.Version,
Nonce: pl.Nonce,
ToAddr: pl.ToAddr,
Amount: a,
//PubKey: pl.PubKey,
Version: pl.Version,
Nonce: pl.Nonce,
ToAddr: pl.ToAddr,
Amount: a,
PubKey: pl.PubKey,
GasPrice: price,
GasLimit: limit,
Code: pl.Code,
Expand All @@ -122,11 +152,11 @@ func (pl *TransactionPayload) ToJson() ([]byte, error) {
}
} else {
p := payload{
Version: pl.Version,
Nonce: pl.Nonce,
ToAddr: pl.ToAddr,
Amount: a,
//PubKey: pl.PubKey,
Version: pl.Version,
Nonce: pl.Nonce,
ToAddr: pl.ToAddr,
Amount: a,
PubKey: pl.PubKey,
GasPrice: price,
GasLimit: limit,
Code: pl.Code,
Expand Down Expand Up @@ -193,10 +223,10 @@ func NewFromMap(middle map[string]interface{}) (*TransactionPayload, error) {
return nil, errors.New("parse payload json failed: limit")
}

//pubkey, ok6 := middle["pubKey"].(string)
//if !ok6 {
// return nil, errors.New("parse payload json failed: public key")
//}
pubkey, ok6 := middle["pubKey"].(string)
if !ok6 {
return nil, errors.New("parse payload json failed: public key")
}

code, ok7 := middle["code"].(string)
if !ok7 {
Expand All @@ -217,6 +247,8 @@ func NewFromMap(middle map[string]interface{}) (*TransactionPayload, error) {
return nil, err
}
sd = string(s)
} else if reflect.TypeOf(d).Kind() == reflect.String {
sd = d.(string)
} else {
j, _ := json.Marshal(d)
var data Data
Expand All @@ -237,11 +269,11 @@ func NewFromMap(middle map[string]interface{}) (*TransactionPayload, error) {
}

return &TransactionPayload{
Version: int(v),
Nonce: int(n),
ToAddr: toAddr.(string),
Amount: fmt.Sprintf("%.0f", amount),
//PubKey: pubkey,
Version: int(v),
Nonce: int(n),
ToAddr: toAddr.(string),
Amount: fmt.Sprintf("%.0f", amount),
PubKey: pubkey,
GasPrice: fmt.Sprintf("%.0f", price),
GasLimit: fmt.Sprintf("%.0f", limit),
Code: code,
Expand Down
71 changes: 7 additions & 64 deletions provider/transaction_payload_test.go
Expand Up @@ -2,71 +2,15 @@ package provider

import (
"fmt"
"os"
"testing"
)

func TestNewFromJson(t *testing.T) {
data := []byte(`{
"version": 65537,
"nonce": 1,
"toAddr": "0x0000000000000000000000000000000000000000",
"amount": 0,
"gasPrice": 10000000,
"gasLimit": 9000,
"code": "",
"data": [
{
"vname": "_scilla_version",
"type": "Uint32",
"value": "0"
},
{
"vname": "initial_owners",
"type": "List ByStr20",
"value": {
"constructor": "Cons",
"argtypes": [
"ByStr20"
],
"arguments": [
"0x1234567890123456789012345678906784567890",
{
"constructor": "Cons",
"argtypes": [
"ByStr20"
],
"arguments": [
"0xabcdeabcde123456786782345678901234567890",
{
"constructor": "Cons",
"argtypes": [
"ByStr20"
],
"arguments": [
"0xffcdeabcde126786789012345678901234567890",
{
"constructor": "Nil",
"argtypes": [
"ByStr20"
],
"arguments": []
}
]
}
]
}
]
}
},
{
"vname": "required_signatures",
"type": "Uint32",
"value": "2"
}
],
"signature": "",
"pubKey": ""
}`)
if os.Getenv("CI") != "" {
t.Skip("Skipping testing in CI environment")
}
data := []byte(`{"version":21823489,"nonce":166471,"toAddr":"bd7198209529dC42320db4bC8508880BcD22a9f2","amount":0,"pubKey":"0246e7178dc8253201101e18fd6f6eb9972451d121fc57aa2a06dd5c111e58dc6a","gasPrice":1000000000,"gasLimit":1000,"code":"","data":{"_tag":"Transfer","params":[{"vname":"to","type":"ByStr20","value":"0x9bfec715a6bd658fcb62b0f8cc9bfa2ade71434a"},{"vname":"tokens","type":"Uint128","value":"10"}]},"signature":"e4ae77ba4534598a723a3792705dd7477ffef8a475da94388d1af0cd29b38a3737b64fbedc4eb72c66b28303ac1b0bb8c45a68da2d40d6def367cbf20e751747"}`)

payload, err2 := NewFromJson(data)
if err2 != nil {
Expand All @@ -75,7 +19,6 @@ func TestNewFromJson(t *testing.T) {

fmt.Println(payload)

data = []byte(`{"version":21823489,"nonce":959,"toAddr":"84eb5C96Bec8d29eDdFBe36865E9B7F26b816f0F","amount":0,"pubKey":"0246e7178dc8253201101e18fd6f6eb9972451d121fc57aa2a06dd5c111e58dc6a","gasPrice":1000000000,"gasLimit":10000,"code":"","data":{"_tag":"SubmitCustomMintTransaction","params":[{"vname":"proxyTokenContract","type":"ByStr20","value":"0x39550ab45d74cce5fef70e857c1326b2d9bee096"},{"vname":"to","type":"ByStr20","value":"0x39550ab45d74cce5fef70e857c1326b2d9bee096"},{"vname":"value","type":"Uint128","value":"10000000"}]},"signature":"c0dcffb4f5ef80b9e426c16fc1fb62b31356219deb84c5689ab6a73915ea962c0bc4d4a49985803cd1db8aabb6870e8c749003cab41246e17493767acc6cca90"}`)
payload2, err3 := NewFromJson(data)
if err3 != nil {
t.Error(err3.Error())
Expand All @@ -101,7 +44,7 @@ func TestTransactionPayload_ToJson(t *testing.T) {
GasPrice: "10000000",
GasLimit: "9000",
Code: "",
Data: "[{\"vname\":\"_scilla_version\",\"type\":\"Uint32\",\"value\":\"0\"},{\"vname\":\"initial_owners\",\"type\":\"List ByStr20\",\"value\":{\"constructor\":\"Cons\",\"argtypes\":[\"ByStr20\"],\"arguments\":[\"0x1234567890123456789012345678906784567890\",{\"constructor\":\"Cons\",\"argtypes\":[\"ByStr20\"],\"arguments\":[\"0xabcdeabcde123456786782345678901234567890\",{\"constructor\":\"Cons\",\"argtypes\":[\"ByStr20\"],\"arguments\":[\"0xffcdeabcde126786789012345678901234567890\",{\"constructor\":\"Nil\",\"argtypes\":[\"ByStr20\"],\"arguments\":[]}]}]}]}},{\"vname\":\"required_signatures\",\"type\":\"Uint32\",\"value\":\"2\"}]",
Data: "",
Signature: "",
//Priority: false,
}
Expand All @@ -112,7 +55,7 @@ func TestTransactionPayload_ToJson(t *testing.T) {
}

fmt.Println(string(data))
expect := "{\"version\":65537,\"nonce\":1,\"toAddr\":\"0x0000000000000000000000000000000000000000\",\"amount\":0,\"gasPrice\":10000000,\"gasLimit\":9000,\"code\":\"\",\"data\":[{\"vname\":\"_scilla_version\",\"type\":\"Uint32\",\"value\":\"0\"},{\"vname\":\"initial_owners\",\"type\":\"List ByStr20\",\"value\":{\"constructor\":\"Cons\",\"argtypes\":[\"ByStr20\"],\"arguments\":[\"0x1234567890123456789012345678906784567890\",{\"constructor\":\"Cons\",\"argtypes\":[\"ByStr20\"],\"arguments\":[\"0xabcdeabcde123456786782345678901234567890\",{\"constructor\":\"Cons\",\"argtypes\":[\"ByStr20\"],\"arguments\":[\"0xffcdeabcde126786789012345678901234567890\",{\"constructor\":\"Nil\",\"argtypes\":[\"ByStr20\"],\"arguments\":[]}]}]}]}},{\"vname\":\"required_signatures\",\"type\":\"Uint32\",\"value\":\"2\"}],\"signature\":\"\"}"
expect := "{\"version\":65537,\"nonce\":1,\"toAddr\":\"0x0000000000000000000000000000000000000000\",\"amount\":0,\"pubKey\":\"\",\"gasPrice\":10000000,\"gasLimit\":9000,\"code\":\"\",\"data\":\"\",\"signature\":\"\"}"
if len(string(data)) != len(expect) {
t.Fail()
}
Expand Down

0 comments on commit cb75605

Please sign in to comment.