-
Notifications
You must be signed in to change notification settings - Fork 2
/
transaction.go
130 lines (113 loc) · 4.5 KB
/
transaction.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// Copyright 2020 Dragonchain, Inc. or its affiliates. All Rights Reserved.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package dragonchain
// CreateTransaction defines the transaction schema for dragonchain.
type CreateTransaction struct {
Version string `json:"version"`
TransactionType string `json:"txn_type"`
Tag string `json:"tag"`
Payload map[string]interface{} `json:"payload"`
}
// Header defines the HTTP headers required for dragonchain authentication
type Header struct {
TransactionType string `json:"txn_type"`
DcID string `json:"dc_id"`
TxnID string `json:"txn_id"`
BlockID string `json:"block_id"`
TimeStamp string `json:"timestamp"`
Tag string `json:"tag"`
Invoker string `json:"invoker"`
}
// Proof defines the proof object returned by L1 dragonchains.
type Proof struct {
Full string `json:"full"`
Stripped string `json:"stripped"`
}
// Transaction defines the complete transaction on a dragonchain.
type Transaction struct {
Version string `json:"version"`
DCRN string `json:"dcrn"`
Header Header `json:"header"`
Payload map[string]interface{} `json:"payload"`
Proof Proof `json:"proof"`
}
// GetSmartContractHeap defines the request format for getting a key from a Smart Contract's heap.
type GetSmartContractHeap struct {
SCName string `json:"sc_name"`
Key string `json:"key"`
}
// TransactionType defines the properties of a valid Dragonchain transaction type.
type TransactionType struct {
Version string `json:"version"`
Type string `json:"txn_type"`
CustomIndexes []CustomIndexStructure `json:"custom_indexes"`
IsContract bool `json:"is_contract"`
}
// CustomIndexStructure defines the valid format of custom indexes on a transaction type.
type CustomIndexStructure struct {
Key string `json:"key"`
Path string `json:"path"`
}
// BitcoinTransaction represents a transaction on a bitcoin chain.
type BitcoinTransaction struct {
Network string `json:"network"`
SatoshisPerByte float32 `json:"satoshisPerByte,omitempty"`
Data string `json:"data,omitempty"`
ChangeAddress string `json:"changeAddress,omitempty"`
Outputs []BitcoinOutputs `json:"outputs,omitempty"`
}
type bitcoinBackEndTransaction struct {
Network string
Transaction bitcoinTransactionWithoutNetwork
}
type bitcoinTransactionWithoutNetwork struct {
SatoshisPerByte float32 `json:"satoshisPerByte,omitempty"`
Data string `json:"data,omitempty"`
ChangeAddress string `json:"changeAddress,omitempty"`
Outputs []BitcoinOutputs `json:"outputs,omitempty"`
}
// EthereumTransaction represents a transaction on an ethereum chain.
type EthereumTransaction struct {
Network string `json:"network"`
To string `json:"to"`
Value string `json:"value"`
Data string `json:"data,omitempty"`
GasPrice string `json:"gasPrice,omitempty"`
Gas string `json:"gas,omitempty"`
}
type ethereumBackEndTransaction struct {
Network string `json:"network"`
Transaction ethereumTransactionWithoutNetwork
}
type ethereumTransactionWithoutNetwork struct {
To string `json:"to"`
Value string `json:"value"`
Data string `json:"data,omitempty"`
GasPrice string `json:"gasPrice,omitempty"`
Gas string `json:"gas,omitempty"`
}
// BitcoinNetworks supported for interchain capabilities
var BitcoinNetworks = map[string]bool{
"BTC_MAINNET": true,
"BTC_TESTNET3": true,
}
// EthereumNetworks supported for interchain capabilities
var EthereumNetworks = map[string]bool{
"ETH_MAINNET": true,
"ETH_ROPSTEN": true,
"ETC_MAINNET": true,
"ETC_MORDEN": true,
}
// BitcoinOutputs are optional outputs for a bitcoin transaction.
type BitcoinOutputs struct {
ScriptPubKey string `json:"scriptPubKey"`
Value float32 `json:"value,omitempty"`
}