2018-03-21 16:11:04 +00:00
|
|
|
package core
|
|
|
|
|
|
|
|
import (
|
2019-11-28 16:06:09 +00:00
|
|
|
"github.com/CityOfZion/neo-go/pkg/core/state"
|
2019-09-16 09:18:13 +00:00
|
|
|
"github.com/CityOfZion/neo-go/pkg/io"
|
2018-03-21 16:11:04 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
// UnspentCoinState hold the state of a unspent coin.
|
|
|
|
type UnspentCoinState struct {
|
2019-11-28 16:06:09 +00:00
|
|
|
states []state.Coin
|
2018-03-21 16:11:04 +00:00
|
|
|
}
|
|
|
|
|
2018-04-16 20:15:30 +00:00
|
|
|
// NewUnspentCoinState returns a new unspent coin state with N confirmed states.
|
|
|
|
func NewUnspentCoinState(n int) *UnspentCoinState {
|
|
|
|
u := &UnspentCoinState{
|
2019-11-28 16:06:09 +00:00
|
|
|
states: make([]state.Coin, n),
|
2018-04-16 20:15:30 +00:00
|
|
|
}
|
|
|
|
for i := 0; i < n; i++ {
|
2019-11-28 16:06:09 +00:00
|
|
|
u.states[i] = state.CoinConfirmed
|
2018-04-16 20:15:30 +00:00
|
|
|
}
|
|
|
|
return u
|
|
|
|
}
|
|
|
|
|
2019-09-16 09:18:13 +00:00
|
|
|
// EncodeBinary encodes UnspentCoinState to the given BinWriter.
|
2019-09-16 16:31:49 +00:00
|
|
|
func (s *UnspentCoinState) EncodeBinary(bw *io.BinWriter) {
|
2019-08-28 16:27:06 +00:00
|
|
|
bw.WriteVarUint(uint64(len(s.states)))
|
2018-03-21 16:11:04 +00:00
|
|
|
for _, state := range s.states {
|
2019-12-06 15:22:21 +00:00
|
|
|
bw.WriteBytes([]byte{byte(state)})
|
2018-03-21 16:11:04 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-09-16 09:18:13 +00:00
|
|
|
// DecodeBinary decodes UnspentCoinState from the given BinReader.
|
2019-09-16 16:31:49 +00:00
|
|
|
func (s *UnspentCoinState) DecodeBinary(br *io.BinReader) {
|
2019-08-28 16:27:06 +00:00
|
|
|
lenStates := br.ReadVarUint()
|
2019-11-28 16:06:09 +00:00
|
|
|
s.states = make([]state.Coin, lenStates)
|
2018-03-21 16:11:04 +00:00
|
|
|
for i := 0; i < int(lenStates); i++ {
|
2019-11-28 16:06:09 +00:00
|
|
|
var coinState uint8
|
|
|
|
br.ReadLE(&coinState)
|
|
|
|
s.states[i] = state.Coin(coinState)
|
Implement rpc server method: sendrawtransaction (#174)
* Added new config attributes: 'SecondsPerBlock','LowPriorityThreshold'
* Added new files:
* Added new method: CompareTo
* Fixed empty Slice case
* Added new methods: LessThan, GreaterThan, Equal, CompareTo
* Added new method: InputIntersection
* Added MaxTransactionSize, GroupOutputByAssetID
* Added ned method: ScriptHash
* Added new method: IsDoubleSpend
* Refactor blockchainer, Added Feer interface, Verify and GetMemPool method
* 1) Added MemPool
2) Added new methods to satisfy the blockchainer interface: IsLowPriority, Verify, GetMemPool
* Added new methods: RelayTxn, RelayDirectly
* Fixed tests
* Implemented RPC server method sendrawtransaction
* Refactor getrawtransaction, sendrawtransaction in separate methods
* Moved 'secondsPerBlock' to config file
* Implemented Kim suggestions:
1) Fixed data race issues
2) refactor Verify method
3) Get rid of unused InputIntersection method due to refactoring Verify method
4) Fixed bug in https://github.com/CityOfZion/neo-go/pull/174#discussion_r264108135
5) minor simplications of the code
* Fixed minor issues related to
1) space
2) getter methods do not need pointer on the receiver
3) error message
4) refactoring CompareTo method in uint256.go
* Fixed small issues
* Use sync.RWMutex instead of sync.Mutex
* Refined (R)Lock/(R)Unlock
* return error instead of bool in Verify methods
2019-03-20 12:30:05 +00:00
|
|
|
}
|
|
|
|
}
|