Cleanup TransactionDetails RPC messages.

Remove the addresses field from TransactionDetails.Output.  It is
assumed that the caller is able to deserialize the transaction and
encode the output scripts to addresses, so this is unnecessary server
overhead and conflicts with the current API philosophy of not
duplicating data already included in another field.

Since there is no additional data included for outputs not controlled
by the wallet, remove the `mine` specifier from the Output message and
replace it with an output index.  Only include messages for controlled
outputs, rather than creating messages for both controlled and
uncontrolled outputs.  Rename the repeated field from `outputs` to
`credits` to be consistent with the `debits` field.

Bump major API version as this is a breaking change.

Closes #408.
This commit is contained in:
Josh Rickmar 2016-04-15 10:11:35 -04:00
parent 5e3613775d
commit fb06a6bd04
5 changed files with 178 additions and 220 deletions

View file

@ -56,19 +56,14 @@ message TransactionDetails {
int64 previous_amount = 3; int64 previous_amount = 3;
} }
message Output { message Output {
bool mine = 3; uint32 index = 1;
uint32 account = 2;
// These fields only relevant if mine==true. bool internal = 3;
uint32 account = 4;
bool internal = 5;
// These fields only relevant if mine==false.
repeated string addresses = 6; // None if non-standard.
} }
bytes hash = 1; bytes hash = 1;
bytes transaction = 2; bytes transaction = 2;
repeated Input debits = 3; repeated Input debits = 3;
repeated Output outputs = 4; repeated Output credits = 4;
int64 fee = 5; int64 fee = 5;
int64 timestamp = 6; // May be earlier than a block timestamp, but never later. int64 timestamp = 6; // May be earlier than a block timestamp, but never later.
} }

View file

@ -1,6 +1,6 @@
# RPC API Specification # RPC API Specification
Version: 1.0.0 Version: 2.0.0
**Note:** This document assumes the reader is familiar with gRPC concepts. **Note:** This document assumes the reader is familiar with gRPC concepts.
Refer to the [gRPC Concepts documentation](http://www.grpc.io/docs/guides/concepts.html) Refer to the [gRPC Concepts documentation](http://www.grpc.io/docs/guides/concepts.html)
@ -958,23 +958,17 @@ transaction was seen.
- `int64 previous_amount`: The previous output value. - `int64 previous_amount`: The previous output value.
- `repeated Output outputs`: Properties for every transaction output. Every - `repeated Output credits`: Properties for every output controlled by the wallet.
transaction output has a corresponding properties message in this repeated
field.
**Nested message:** `Output` **Nested message:** `Output`
- `bool mine`: Whether the output is controlled by the wallet. - `uint32 index`: The transaction output index of the output being reported.
- `uint32 account`: The account number of the controlled output. This field - `uint32 account`: The account number of the controlled output.
is only relevant if `mine` is true.
- `bool internal`: Whether the output pays to an address derived from the - `bool internal`: Whether the output pays to an address derived from the
account's internal key series. This often means the output is a change account's internal key series. This often means the output is a change
output. This field is only relevant if `mine` is true. output.
- `repeated string addresses`: The payment address string(s) this output pays
to. This is only relevant if `mine` is false.
- `int64 fee`: The transaction fee, if calculable. The fee is only calculable - `int64 fee`: The transaction fee, if calculable. The fee is only calculable
when every previous output spent by this transaction is also recorded by when every previous output spent by this transaction is also recorded by
@ -984,5 +978,5 @@ transaction was seen.
seen. seen.
**Stability**: Unstable: Since the caller is expected to decode the serialized **Stability**: Unstable: Since the caller is expected to decode the serialized
transaction, and would have access to every output script, The output transaction, and would have access to every output script, the output
properties could be changed to only include outputs controlled by the wallet. properties could be changed to only include outputs controlled by the wallet.

View file

@ -43,8 +43,8 @@ import (
// Public API version constants // Public API version constants
const ( const (
semverString = "1.0.0" semverString = "2.0.0"
semverMajor = 1 semverMajor = 2
semverMinor = 0 semverMinor = 0
semverPatch = 0 semverPatch = 0
) )
@ -568,20 +568,10 @@ func marshalTransactionOutputs(v []wallet.TransactionSummaryOutput) []*pb.Transa
outputs := make([]*pb.TransactionDetails_Output, len(v)) outputs := make([]*pb.TransactionDetails_Output, len(v))
for i := range v { for i := range v {
output := &v[i] output := &v[i]
var addresses []string
if len(output.Addresses) != 0 {
addresses = make([]string, 0, len(output.Addresses))
for _, a := range output.Addresses {
addresses = append(addresses, a.EncodeAddress())
}
}
outputs[i] = &pb.TransactionDetails_Output{ outputs[i] = &pb.TransactionDetails_Output{
Mine: output.Mine, Index: output.Index,
Account: output.Account, Account: output.Account,
Internal: output.Internal, Internal: output.Internal,
Addresses: addresses,
} }
} }
return outputs return outputs
@ -595,7 +585,7 @@ func marshalTransactionDetails(v []wallet.TransactionSummary) []*pb.TransactionD
Hash: tx.Hash[:], Hash: tx.Hash[:],
Transaction: tx.Transaction, Transaction: tx.Transaction,
Debits: marshalTransactionInputs(tx.MyInputs), Debits: marshalTransactionInputs(tx.MyInputs),
Outputs: marshalTransactionOutputs(tx.Outputs), Credits: marshalTransactionOutputs(tx.MyOutputs),
Fee: int64(tx.Fee), Fee: int64(tx.Fee),
Timestamp: tx.Timestamp, Timestamp: tx.Timestamp,
} }

View file

@ -149,7 +149,7 @@ type TransactionDetails struct {
Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"`
Transaction []byte `protobuf:"bytes,2,opt,name=transaction,proto3" json:"transaction,omitempty"` Transaction []byte `protobuf:"bytes,2,opt,name=transaction,proto3" json:"transaction,omitempty"`
Debits []*TransactionDetails_Input `protobuf:"bytes,3,rep,name=debits" json:"debits,omitempty"` Debits []*TransactionDetails_Input `protobuf:"bytes,3,rep,name=debits" json:"debits,omitempty"`
Outputs []*TransactionDetails_Output `protobuf:"bytes,4,rep,name=outputs" json:"outputs,omitempty"` Credits []*TransactionDetails_Output `protobuf:"bytes,4,rep,name=credits" json:"credits,omitempty"`
Fee int64 `protobuf:"varint,5,opt,name=fee" json:"fee,omitempty"` Fee int64 `protobuf:"varint,5,opt,name=fee" json:"fee,omitempty"`
Timestamp int64 `protobuf:"varint,6,opt,name=timestamp" json:"timestamp,omitempty"` Timestamp int64 `protobuf:"varint,6,opt,name=timestamp" json:"timestamp,omitempty"`
} }
@ -166,9 +166,9 @@ func (m *TransactionDetails) GetDebits() []*TransactionDetails_Input {
return nil return nil
} }
func (m *TransactionDetails) GetOutputs() []*TransactionDetails_Output { func (m *TransactionDetails) GetCredits() []*TransactionDetails_Output {
if m != nil { if m != nil {
return m.Outputs return m.Credits
} }
return nil return nil
} }
@ -185,12 +185,9 @@ func (*TransactionDetails_Input) ProtoMessage() {}
func (*TransactionDetails_Input) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } func (*TransactionDetails_Input) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} }
type TransactionDetails_Output struct { type TransactionDetails_Output struct {
Mine bool `protobuf:"varint,3,opt,name=mine" json:"mine,omitempty"` Index uint32 `protobuf:"varint,1,opt,name=index" json:"index,omitempty"`
// These fields only relevant if mine==true. Account uint32 `protobuf:"varint,2,opt,name=account" json:"account,omitempty"`
Account uint32 `protobuf:"varint,4,opt,name=account" json:"account,omitempty"` Internal bool `protobuf:"varint,3,opt,name=internal" json:"internal,omitempty"`
Internal bool `protobuf:"varint,5,opt,name=internal" json:"internal,omitempty"`
// These fields only relevant if mine==false.
Addresses []string `protobuf:"bytes,6,rep,name=addresses" json:"addresses,omitempty"`
} }
func (m *TransactionDetails_Output) Reset() { *m = TransactionDetails_Output{} } func (m *TransactionDetails_Output) Reset() { *m = TransactionDetails_Output{} }
@ -1786,156 +1783,155 @@ var _WalletLoaderService_serviceDesc = grpc.ServiceDesc{
} }
var fileDescriptor0 = []byte{ var fileDescriptor0 = []byte{
// 2413 bytes of a gzipped FileDescriptorProto // 2391 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x59, 0x5b, 0x73, 0xdc, 0x48, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x59, 0x5b, 0x73, 0xdc, 0x48,
0x15, 0x66, 0x2c, 0xdf, 0x72, 0xe6, 0xde, 0xbe, 0x4d, 0x94, 0x38, 0xc9, 0x2a, 0xbb, 0xd9, 0xec, 0x15, 0x66, 0x2c, 0xdf, 0x72, 0xe6, 0xde, 0xbe, 0x4d, 0x94, 0x38, 0xc9, 0x2a, 0xbb, 0xd9, 0xec,
0x2e, 0x98, 0x60, 0x02, 0x2c, 0xc5, 0x56, 0xd8, 0xc4, 0x64, 0xd9, 0x21, 0xc1, 0x99, 0x92, 0x93, 0x2e, 0x98, 0x60, 0x02, 0x2c, 0xc5, 0x56, 0xd8, 0xc4, 0x64, 0xd9, 0x21, 0xc1, 0x99, 0x92, 0x93,
0x4d, 0xaa, 0xa0, 0x98, 0x92, 0x35, 0xed, 0x58, 0x78, 0x46, 0x9a, 0x48, 0x9a, 0x38, 0xe1, 0x89, 0x4d, 0xaa, 0xa0, 0x98, 0x92, 0x35, 0xed, 0x58, 0x78, 0x46, 0x9a, 0x48, 0x9a, 0x38, 0xe1, 0x89,
0xa2, 0x8a, 0x47, 0x5e, 0x80, 0x07, 0x0a, 0x6a, 0x5f, 0xf8, 0x05, 0x54, 0xf1, 0xc2, 0x2b, 0xbf, 0xa2, 0x8a, 0x47, 0x5e, 0x80, 0x07, 0x0a, 0x6a, 0x5f, 0xf8, 0x05, 0x54, 0xf1, 0xc2, 0x23, 0xfc,
0x81, 0x47, 0xf8, 0x15, 0xfc, 0x02, 0xfa, 0x72, 0x7a, 0xd4, 0x2d, 0x69, 0xc6, 0xf6, 0x16, 0x6f, 0x06, 0x1e, 0xf9, 0x17, 0xfc, 0x02, 0xfa, 0x72, 0x7a, 0xd4, 0x2d, 0x69, 0xc6, 0xf6, 0x16, 0x6f,
0xa3, 0xaf, 0x4f, 0x9f, 0x3e, 0xe7, 0xf4, 0xb9, 0xf6, 0xc0, 0x25, 0x6f, 0x1c, 0xec, 0x8c, 0xe3, 0xa3, 0xaf, 0xcf, 0x39, 0x7d, 0xfa, 0xf4, 0xb9, 0xf6, 0xc0, 0x25, 0x6f, 0x1c, 0xec, 0x8c, 0xe3,
0x28, 0x8d, 0xc8, 0xa5, 0x53, 0x6f, 0x38, 0xa4, 0x69, 0x3c, 0xf6, 0x9d, 0x16, 0x34, 0xbe, 0xa0, 0x28, 0x8d, 0xc8, 0xa5, 0x53, 0x6f, 0x38, 0xa4, 0x69, 0x3c, 0xf6, 0x9d, 0x16, 0x34, 0xbe, 0xa0,
0x71, 0x12, 0x44, 0xa1, 0x4b, 0x5f, 0x4d, 0x68, 0x92, 0x3a, 0xff, 0xac, 0x40, 0x73, 0x0a, 0x25, 0x71, 0x12, 0x44, 0xa1, 0x4b, 0x5f, 0x4d, 0x68, 0x92, 0x3a, 0xff, 0xaa, 0x40, 0x73, 0x0a, 0x25,
0xe3, 0x28, 0x4c, 0x28, 0x79, 0x0f, 0x1a, 0xaf, 0x25, 0xd4, 0x4f, 0xd2, 0x38, 0x08, 0x5f, 0x76, 0xe3, 0x28, 0x4c, 0x28, 0x79, 0x0f, 0x1a, 0xaf, 0x25, 0xd4, 0x4f, 0xd2, 0x38, 0x08, 0x5f, 0x76,
0x2a, 0x37, 0x2a, 0xb7, 0x2f, 0xb9, 0x75, 0x44, 0x0f, 0x04, 0x48, 0xd6, 0x61, 0x69, 0xe4, 0xfd, 0x2a, 0x37, 0x2a, 0xb7, 0x2f, 0xb9, 0x75, 0x44, 0x0f, 0x04, 0x48, 0xd6, 0x61, 0x69, 0xe4, 0xfd,
0x32, 0x8a, 0x3b, 0x0b, 0x6c, 0xb5, 0xee, 0xca, 0x0f, 0x81, 0x06, 0x21, 0x43, 0x2d, 0x44, 0xf9, 0x32, 0x8a, 0x3b, 0x0b, 0x6c, 0xb5, 0xee, 0xca, 0x0f, 0x81, 0x06, 0x21, 0x43, 0x2d, 0x44, 0xf9,
0x07, 0x47, 0xc7, 0x5e, 0xea, 0x1f, 0x77, 0x16, 0x25, 0x2a, 0x3e, 0xc8, 0x35, 0x80, 0x71, 0x4c, 0x07, 0x47, 0xc7, 0x5e, 0xea, 0x1f, 0x77, 0x16, 0x25, 0x2a, 0x3e, 0xc8, 0x35, 0x80, 0x71, 0x4c,
0x63, 0x3a, 0xa4, 0x5e, 0x42, 0x3b, 0x4b, 0xe2, 0x10, 0x0d, 0xe1, 0x82, 0x1c, 0x4e, 0x82, 0xe1, 0x63, 0x3a, 0xa4, 0x5e, 0x42, 0x3b, 0x4b, 0x62, 0x13, 0x0d, 0xe1, 0x8a, 0x1c, 0x4e, 0x82, 0xe1,
0xa0, 0x3f, 0xa2, 0xa9, 0x37, 0xf0, 0x52, 0xaf, 0xb3, 0x2c, 0x05, 0x11, 0xe8, 0x4f, 0x11, 0x74, 0xa0, 0x3f, 0xa2, 0xa9, 0x37, 0xf0, 0x52, 0xaf, 0xb3, 0x2c, 0x15, 0x11, 0xe8, 0x4f, 0x11, 0x74,
0xfe, 0x63, 0x01, 0x79, 0x1a, 0x7b, 0x61, 0xe2, 0xf9, 0x29, 0x13, 0xef, 0x47, 0x0c, 0x0f, 0x86, 0xfe, 0x69, 0x01, 0x79, 0x1a, 0x7b, 0x61, 0xe2, 0xf9, 0x29, 0x53, 0xef, 0x47, 0x0c, 0x0f, 0x86,
0x09, 0x21, 0xb0, 0x78, 0xec, 0x25, 0xc7, 0x42, 0xf8, 0x9a, 0x2b, 0x7e, 0x93, 0x1b, 0x50, 0x4d, 0x09, 0x21, 0xb0, 0x78, 0xec, 0x25, 0xc7, 0x42, 0xf9, 0x9a, 0x2b, 0x7e, 0x93, 0x1b, 0x50, 0x4d,
0x33, 0x4a, 0x21, 0x79, 0xcd, 0xd5, 0x21, 0xf2, 0x03, 0x58, 0x1e, 0xd0, 0xc3, 0x20, 0x4d, 0x98, 0x33, 0x4a, 0xa1, 0x79, 0xcd, 0xd5, 0x21, 0xf2, 0x03, 0x58, 0x1e, 0xd0, 0xc3, 0x20, 0x4d, 0xd8,
0x02, 0xd6, 0xed, 0xea, 0xee, 0xcd, 0x9d, 0xa9, 0xf9, 0x76, 0x8a, 0x87, 0xec, 0x74, 0xc3, 0xf1, 0x01, 0xac, 0xdb, 0xd5, 0xdd, 0x9b, 0x3b, 0x53, 0xf3, 0xed, 0x14, 0x37, 0xd9, 0xe9, 0x86, 0xe3,
0x24, 0x75, 0x71, 0x0b, 0xb9, 0x07, 0x2b, 0xd1, 0x24, 0x65, 0x48, 0xc2, 0x14, 0xe5, 0xbb, 0xdf, 0x49, 0xea, 0x22, 0x0b, 0xb9, 0x07, 0x2b, 0x7e, 0x4c, 0x07, 0x9c, 0x7b, 0x51, 0x70, 0xbf, 0x3b,
0x9d, 0xbf, 0xfb, 0x89, 0x20, 0x76, 0xd5, 0x26, 0xd2, 0x02, 0xeb, 0x88, 0x4a, 0x4b, 0x58, 0x2e, 0x9f, 0xfb, 0xc9, 0x24, 0xe5, 0xec, 0x8a, 0x89, 0xb4, 0xc0, 0x3a, 0xa2, 0xd2, 0x12, 0x96, 0xcb,
0xff, 0x49, 0xae, 0xc2, 0xa5, 0x34, 0x18, 0xb1, 0x9b, 0xf2, 0x46, 0x63, 0xa1, 0xbd, 0xe5, 0x66, 0x7f, 0x92, 0xab, 0x70, 0x29, 0x0d, 0x46, 0xec, 0xa6, 0xbc, 0xd1, 0x58, 0x9c, 0xde, 0x72, 0x33,
0x80, 0xfd, 0x0a, 0x96, 0x84, 0x00, 0xdc, 0xbe, 0x41, 0x38, 0xa0, 0x6f, 0x84, 0xb2, 0xcc, 0xbe, 0xc0, 0x7e, 0x05, 0x4b, 0x42, 0x01, 0x6e, 0xdf, 0x20, 0x1c, 0xd0, 0x37, 0xe2, 0xb0, 0xcc, 0xbe,
0xe2, 0x83, 0x7c, 0x00, 0x2d, 0x66, 0xcd, 0xd7, 0x41, 0x34, 0x49, 0xfa, 0x9e, 0xef, 0x47, 0x93, 0xe2, 0x83, 0x7c, 0x00, 0x2d, 0x66, 0xcd, 0xd7, 0x41, 0x34, 0x49, 0xfa, 0x9e, 0xef, 0x47, 0x93,
0x30, 0xc5, 0xcb, 0x6a, 0x2a, 0xfc, 0xbe, 0x84, 0xc9, 0xfb, 0xd0, 0xcc, 0x48, 0x47, 0x82, 0xd2, 0x30, 0xc5, 0xcb, 0x6a, 0x2a, 0xfc, 0xbe, 0x84, 0xc9, 0xfb, 0xd0, 0xcc, 0x48, 0x47, 0x82, 0xd2,
0x12, 0xa7, 0x35, 0xa6, 0x94, 0x02, 0xb5, 0xc7, 0xb0, 0x2c, 0xa5, 0xe6, 0xf6, 0x65, 0x97, 0x4b, 0x12, 0xbb, 0x35, 0xa6, 0x94, 0x02, 0xb5, 0x9f, 0xc2, 0xb2, 0xd4, 0x7a, 0xc6, 0x9e, 0x1d, 0x58,
0x05, 0xdd, 0xaa, 0x2b, 0x7e, 0x93, 0x0e, 0xac, 0xa8, 0x83, 0xe4, 0x4d, 0xab, 0x4f, 0x62, 0xc3, 0x31, 0xb7, 0x52, 0x9f, 0xc4, 0x86, 0xd5, 0x20, 0x4c, 0x69, 0x1c, 0x7a, 0x43, 0x21, 0x7b, 0xd5,
0x6a, 0x10, 0xa6, 0x34, 0x0e, 0xbd, 0xa1, 0xd0, 0x6f, 0xd5, 0x9d, 0x7e, 0x73, 0x25, 0xbd, 0xc1, 0x9d, 0x7e, 0x3b, 0x7f, 0xa9, 0x40, 0xed, 0xc1, 0x30, 0xf2, 0x4f, 0xe6, 0x5d, 0xde, 0x26, 0x2c,
0x20, 0xa6, 0x49, 0x42, 0x13, 0xa6, 0xa4, 0xc5, 0xae, 0x38, 0x03, 0x9c, 0xbf, 0x54, 0xa0, 0xf6, 0x1f, 0xd3, 0xe0, 0xe5, 0xb1, 0x94, 0xbc, 0xe4, 0xe2, 0x97, 0x69, 0x23, 0x2b, 0x67, 0x23, 0x72,
0x60, 0x18, 0xf9, 0x27, 0xf3, 0x2e, 0x76, 0x13, 0x96, 0x8f, 0x69, 0xf0, 0xf2, 0x58, 0x2a, 0xb8, 0x1f, 0x6a, 0xda, 0xfd, 0xaa, 0x8b, 0xd9, 0x9e, 0x7b, 0x31, 0xae, 0xc1, 0xe2, 0x3c, 0x81, 0x06,
0xe4, 0xe2, 0x97, 0x69, 0x3f, 0x2b, 0x67, 0x3f, 0x72, 0x1f, 0x6a, 0xda, 0xdd, 0xab, 0x4b, 0xdb, 0xda, 0xe9, 0x81, 0x37, 0xf4, 0x42, 0x9f, 0xea, 0xa7, 0xac, 0x98, 0xa7, 0xbc, 0x09, 0xf5, 0x34,
0x9e, 0x7b, 0x69, 0xae, 0xb1, 0xc5, 0x79, 0x02, 0x0d, 0xb4, 0xe1, 0x03, 0x6f, 0xe8, 0x85, 0xbe, 0x4a, 0xbd, 0x61, 0xff, 0x50, 0x92, 0x0a, 0x5d, 0x2d, 0x26, 0x90, 0x83, 0xc8, 0xee, 0xd4, 0xa1,
0x61, 0x83, 0x8a, 0x69, 0x83, 0x9b, 0x50, 0x4f, 0xa3, 0xd4, 0x1b, 0xf6, 0x0f, 0x25, 0xa9, 0x90, 0xda, 0x63, 0x21, 0xa4, 0x82, 0xb0, 0x01, 0x35, 0xf9, 0x29, 0x03, 0x90, 0x87, 0xe9, 0x3e, 0x4d,
0xd5, 0x62, 0x0c, 0x39, 0x88, 0xdb, 0x9d, 0x3a, 0x54, 0x7b, 0x2c, 0xbc, 0x54, 0x80, 0x36, 0xa0, 0x4f, 0xa3, 0xf8, 0x44, 0x51, 0x7c, 0x0c, 0xcd, 0x29, 0x92, 0x45, 0x29, 0xd7, 0xef, 0x35, 0xed,
0x26, 0x3f, 0x65, 0x70, 0xf2, 0x10, 0xde, 0xa7, 0xe9, 0x69, 0x14, 0x9f, 0x28, 0x8a, 0x8f, 0xa1, 0x87, 0x72, 0x05, 0x35, 0xa9, 0x4b, 0x14, 0xc9, 0x9d, 0xef, 0xc3, 0x3a, 0xea, 0xbe, 0x3f, 0x19,
0x39, 0x45, 0xb2, 0x08, 0xe6, 0xf2, 0xbd, 0xa6, 0xfd, 0x50, 0xae, 0xa0, 0x24, 0x75, 0x89, 0x22, 0x1d, 0xd2, 0x18, 0x25, 0x92, 0x77, 0xa0, 0x86, 0x2a, 0xf7, 0x43, 0x6f, 0x44, 0x31, 0xc4, 0xab,
0xb9, 0xf3, 0x7d, 0x58, 0x47, 0xd9, 0xf7, 0x27, 0xa3, 0x43, 0x1a, 0x23, 0x47, 0xf2, 0x0e, 0xd4, 0x88, 0xed, 0x33, 0xc8, 0xb9, 0x07, 0x1b, 0x39, 0x56, 0x7d, 0x6b, 0xe4, 0x15, 0x2b, 0xd9, 0xd6,
0x50, 0xe4, 0x7e, 0xe8, 0x8d, 0x28, 0x86, 0x7f, 0x15, 0xb1, 0x7d, 0x06, 0x39, 0xf7, 0x60, 0x23, 0x1a, 0xb9, 0xd3, 0x86, 0x26, 0xf2, 0x27, 0xea, 0x1c, 0xff, 0xb0, 0xa0, 0x95, 0x61, 0x28, 0xee,
0xb7, 0x55, 0x3f, 0x1a, 0xf7, 0x8a, 0x95, 0xec, 0x68, 0x8d, 0xdc, 0x69, 0x43, 0x13, 0xf7, 0x27, 0x87, 0xb0, 0x8a, 0x8c, 0x09, 0x13, 0x94, 0x0f, 0xba, 0x3c, 0xb9, 0x02, 0xdc, 0x29, 0x13, 0xf9,
0x4a, 0x8f, 0x7f, 0x58, 0xd0, 0xca, 0x30, 0x64, 0xf7, 0x43, 0x58, 0xc5, 0x8d, 0x09, 0x63, 0x94, 0x3a, 0x10, 0x7f, 0x12, 0xc7, 0x94, 0xe9, 0x73, 0xc8, 0x9d, 0xa8, 0x2f, 0x5c, 0x47, 0x06, 0x77,
0x0f, 0xc8, 0x3c, 0xb9, 0x02, 0xdc, 0xe9, 0x26, 0xf2, 0x75, 0x20, 0xfe, 0x24, 0x8e, 0x29, 0x93, 0x0b, 0x57, 0x84, 0x77, 0x7d, 0xce, 0xdd, 0xe8, 0x0e, 0xac, 0xe7, 0xa8, 0xa5, 0x53, 0x59, 0xc2,
0xe7, 0x90, 0x3b, 0x51, 0x5f, 0xb8, 0x8e, 0x0c, 0xfc, 0x16, 0xae, 0x08, 0xef, 0xfa, 0x9c, 0xbb, 0xa9, 0x88, 0x41, 0x2f, 0x56, 0xec, 0xdf, 0x2c, 0xc0, 0x8a, 0x0a, 0x94, 0xf3, 0x9d, 0xbd, 0x60,
0xd1, 0x1d, 0x58, 0xcf, 0x51, 0x4b, 0xa7, 0xb2, 0x84, 0x53, 0x11, 0x83, 0x5e, 0xac, 0xd8, 0xbf, 0xde, 0x85, 0x82, 0x79, 0x8b, 0x9e, 0x62, 0x15, 0x3d, 0x85, 0x1f, 0x8d, 0xbe, 0x91, 0x41, 0xd2,
0x59, 0x80, 0x15, 0x15, 0x44, 0xe7, 0xd3, 0xbd, 0x60, 0xde, 0x85, 0x82, 0x79, 0x8b, 0x9e, 0x62, 0x3f, 0xa1, 0x6f, 0xfb, 0xd2, 0xe7, 0x64, 0x16, 0x6d, 0xa9, 0x95, 0x47, 0xf4, 0xed, 0x9e, 0x50,
0x15, 0x3d, 0x85, 0xab, 0x46, 0xdf, 0xc8, 0x10, 0xea, 0x9f, 0xd0, 0xb7, 0x7d, 0x3d, 0xee, 0x5a, 0x8e, 0x51, 0xab, 0x90, 0xd2, 0xa8, 0x97, 0x24, 0xb5, 0x5a, 0x31, 0xa8, 0x47, 0xe3, 0x28, 0x4e,
0x6a, 0xe5, 0x11, 0x7d, 0xbb, 0x27, 0x84, 0x63, 0xd4, 0x2a, 0xe0, 0x34, 0xea, 0x25, 0x49, 0xad, 0xe9, 0x40, 0xa3, 0x5e, 0x46, 0x6a, 0x5c, 0x51, 0xd4, 0xce, 0x0b, 0x58, 0x77, 0x29, 0x3f, 0x8b,
0x56, 0x0c, 0xea, 0xd1, 0x38, 0x8a, 0x53, 0x3a, 0xd0, 0xa8, 0x97, 0x91, 0x1a, 0x57, 0x14, 0xb5, 0xb2, 0x3f, 0x3a, 0xd2, 0x39, 0x0d, 0x72, 0x19, 0x56, 0x43, 0x7a, 0xaa, 0x1b, 0x63, 0x85, 0x7d,
0xf3, 0x02, 0xd6, 0x5d, 0xca, 0x75, 0x51, 0xf6, 0x47, 0x47, 0x3a, 0xa7, 0x41, 0x2e, 0xc3, 0x6a, 0x0b, 0x3f, 0xdb, 0x82, 0x8d, 0x9c, 0x64, 0x8c, 0x83, 0xe7, 0x40, 0xf6, 0xd9, 0x19, 0x73, 0x1b,
0x48, 0x4f, 0x75, 0x63, 0xac, 0xb0, 0x6f, 0xe1, 0x67, 0x5b, 0xb0, 0x91, 0xe3, 0x8c, 0x71, 0xf0, 0xf2, 0xaa, 0xe1, 0x25, 0xc9, 0xf8, 0x38, 0xe6, 0x55, 0x43, 0x26, 0x08, 0x0d, 0x39, 0x87, 0xe9,
0x1c, 0xc8, 0x3e, 0xd3, 0x31, 0x77, 0x20, 0xaf, 0x28, 0x5e, 0x92, 0x8c, 0x8f, 0x63, 0x5e, 0x51, 0x9d, 0x4f, 0x60, 0xcd, 0x10, 0x7c, 0x31, 0xbf, 0xfe, 0x73, 0x05, 0xf5, 0x1a, 0x0c, 0x62, 0x9a,
0x64, 0x82, 0xd0, 0x90, 0x73, 0x98, 0xde, 0xf9, 0x04, 0xd6, 0x0c, 0xc6, 0x17, 0xf3, 0xeb, 0x3f, 0x28, 0xdf, 0x9e, 0x93, 0x13, 0xbe, 0x0b, 0x8b, 0x27, 0x2c, 0x3b, 0x0a, 0x4d, 0x1a, 0xbb, 0x8e,
0x57, 0x50, 0x2e, 0x99, 0xbe, 0x94, 0x5c, 0xb3, 0x73, 0xc2, 0x77, 0x61, 0xf1, 0x84, 0x65, 0x6b, 0xe6, 0xdc, 0x45, 0x31, 0x3b, 0x8f, 0x18, 0xa5, 0x2b, 0xe8, 0x9d, 0x5d, 0x58, 0xe4, 0x5f, 0x2c,
0x21, 0x49, 0x63, 0xd7, 0xd1, 0x9c, 0xbb, 0xc8, 0x66, 0xe7, 0x11, 0xa3, 0x74, 0x05, 0xbd, 0xb3, 0xd3, 0xb6, 0x1e, 0x74, 0x7b, 0x77, 0xee, 0xdc, 0xbd, 0xdb, 0x7f, 0xf8, 0xe2, 0xe9, 0x43, 0x77,
0x0b, 0x8b, 0xfc, 0x8b, 0x65, 0xfe, 0xd6, 0x83, 0x6e, 0xef, 0xce, 0x9d, 0xbb, 0x77, 0xfb, 0x0f, 0xff, 0xfe, 0xe3, 0xd6, 0xd7, 0x74, 0xb4, 0xbb, 0x8f, 0x68, 0xc5, 0xf9, 0x26, 0x1e, 0x4d, 0x09,
0x5f, 0x3c, 0x7d, 0xe8, 0xee, 0xdf, 0x7f, 0xdc, 0xfa, 0x9a, 0x8e, 0x76, 0xf7, 0x11, 0xad, 0x38, 0xc5, 0xa3, 0x71, 0xe5, 0x24, 0x84, 0x91, 0xae, 0x3e, 0x9d, 0x3f, 0x54, 0x60, 0xab, 0x2b, 0x2e,
0xdf, 0x44, 0xd5, 0x14, 0x53, 0x54, 0x8d, 0x0b, 0x27, 0x21, 0x8c, 0x74, 0xf5, 0xe9, 0xfc, 0xa1, 0xbb, 0x17, 0x07, 0xaf, 0xbd, 0x94, 0xb2, 0x1b, 0x3f, 0xaf, 0xa9, 0x67, 0x27, 0xfb, 0x5b, 0xbc,
0x02, 0x5b, 0x5d, 0x71, 0xd9, 0xbd, 0x38, 0x78, 0xed, 0xa5, 0x94, 0xdd, 0xf8, 0x79, 0x4d, 0xad, 0x9e, 0x08, 0x71, 0xc2, 0xb5, 0x4e, 0x83, 0x23, 0xe1, 0xde, 0xac, 0x76, 0x8f, 0xa7, 0xbb, 0x3c,
0xa9, 0xbc, 0x60, 0xaa, 0x7c, 0x8b, 0xd7, 0x1a, 0xc1, 0x4e, 0xb8, 0xd6, 0x69, 0x70, 0x24, 0xdc, 0x0f, 0x8e, 0x78, 0x4e, 0x67, 0x5a, 0xf8, 0x5e, 0x28, 0x7c, 0x7a, 0xd5, 0xc5, 0x2f, 0xc7, 0x86,
0x9b, 0xd5, 0xf5, 0xf1, 0xf4, 0x94, 0xe7, 0xc1, 0x11, 0xcf, 0xe9, 0x4c, 0x0a, 0xdf, 0x0b, 0x85, 0x4e, 0x51, 0x29, 0x74, 0x8b, 0x10, 0x1a, 0x18, 0x1e, 0x17, 0xf4, 0xc1, 0xef, 0xc0, 0x66, 0xcc,
0x4f, 0xaf, 0xba, 0xf8, 0xe5, 0xd8, 0xd0, 0x29, 0x0a, 0x85, 0x6e, 0x11, 0x42, 0x03, 0xc3, 0xe3, 0x38, 0x02, 0x56, 0x6d, 0x99, 0xb3, 0x87, 0x47, 0x41, 0x3c, 0xf2, 0x64, 0x51, 0x90, 0x05, 0x65,
0x82, 0x3e, 0xf8, 0x1d, 0xd8, 0x8c, 0xd9, 0x8e, 0x20, 0x66, 0x0e, 0xef, 0x47, 0xe1, 0x51, 0x10, 0x43, 0xad, 0xee, 0xe9, 0x8b, 0x6c, 0xbf, 0xe6, 0x74, 0x3f, 0x34, 0x27, 0xab, 0x7d, 0x22, 0x4c,
0x8f, 0x3c, 0x59, 0x14, 0x64, 0x41, 0xd9, 0x50, 0xab, 0x7b, 0xfa, 0x22, 0x3b, 0xaf, 0x39, 0x3d, 0xc5, 0x3e, 0x96, 0x2b, 0x3f, 0x78, 0x21, 0x4a, 0xc6, 0x34, 0x1c, 0x78, 0x87, 0x43, 0x95, 0xf7,
0x0f, 0xcd, 0xc9, 0x6a, 0xb1, 0x08, 0x53, 0x71, 0x8e, 0xe5, 0xca, 0x0f, 0x5e, 0x88, 0x92, 0x31, 0x33, 0x80, 0x97, 0xd8, 0x60, 0xc4, 0x64, 0x4e, 0x62, 0xda, 0x8f, 0xe9, 0xa9, 0x17, 0x0f, 0x54,
0x0d, 0x07, 0xde, 0xe1, 0x50, 0xe5, 0xfd, 0x0c, 0xe0, 0xe5, 0x37, 0x18, 0x31, 0x9e, 0x93, 0x98, 0x89, 0x55, 0xb0, 0x2b, 0x50, 0xe7, 0x4f, 0x0b, 0xb0, 0xf9, 0x63, 0x9a, 0x6a, 0x65, 0x69, 0xea,
0xf6, 0x63, 0x7a, 0xea, 0xc5, 0x03, 0x55, 0x7e, 0x15, 0xec, 0x0a, 0xd4, 0xf9, 0xd3, 0x02, 0x6c, 0x63, 0x3b, 0xb0, 0xc6, 0xaa, 0x5a, 0x9c, 0xb2, 0x6a, 0xa1, 0xa7, 0x3a, 0x79, 0x33, 0x6d, 0xb5,
0xfe, 0x98, 0xa6, 0x5a, 0x59, 0x9a, 0xfa, 0xd8, 0x0e, 0xac, 0xb1, 0xaa, 0x16, 0xa7, 0xac, 0x5a, 0x94, 0xe5, 0xba, 0x5d, 0xd8, 0xc8, 0xd3, 0x67, 0x15, 0xb4, 0xed, 0xae, 0x99, 0x1c, 0xb2, 0x9c,
0xe8, 0xa9, 0x4e, 0xde, 0x4c, 0x5b, 0x2d, 0x65, 0xb9, 0x6e, 0x17, 0x36, 0xf2, 0xf4, 0x59, 0x05, 0x7e, 0x08, 0x6d, 0xa6, 0x72, 0x6e, 0x07, 0x4b, 0xec, 0xd0, 0x94, 0x0b, 0x99, 0x7c, 0xa6, 0x8f,
0x6d, 0xbb, 0x6b, 0xe6, 0x0e, 0x59, 0x4e, 0x3f, 0x84, 0x36, 0x13, 0x39, 0x77, 0x82, 0x25, 0x4e, 0x49, 0x2b, 0xa5, 0x2f, 0x0a, 0x73, 0xb6, 0x75, 0x6a, 0x29, 0xfb, 0x1e, 0x5c, 0x61, 0x0d, 0x61,
0x68, 0xca, 0x85, 0x8c, 0x3f, 0x93, 0xc7, 0xa4, 0x95, 0xdc, 0x17, 0x85, 0x39, 0xdb, 0x3a, 0xb5, 0x30, 0x9a, 0x8c, 0x98, 0x09, 0x7c, 0x9e, 0x82, 0x8d, 0xda, 0xbc, 0x24, 0xf8, 0x2e, 0x23, 0x89,
0xe4, 0x7d, 0x0f, 0xae, 0xb0, 0x1e, 0x22, 0x18, 0x4d, 0x46, 0xcc, 0x04, 0x3e, 0x4f, 0xc1, 0x46, 0x2b, 0x28, 0x74, 0x33, 0x38, 0x7f, 0x67, 0xce, 0x5a, 0x30, 0x0d, 0xde, 0xc9, 0x67, 0x40, 0x18,
0x6d, 0x5e, 0x12, 0xfb, 0x2e, 0x23, 0x89, 0x2b, 0x28, 0x74, 0x33, 0x38, 0x7f, 0x67, 0xce, 0x5a, 0x23, 0xbb, 0x5a, 0x43, 0xa4, 0x2c, 0x28, 0x5b, 0x5a, 0xcc, 0xe9, 0x7d, 0x86, 0xdb, 0x16, 0x2c,
0x30, 0x0d, 0xde, 0xc9, 0x67, 0x40, 0x78, 0x7f, 0x32, 0x30, 0x59, 0xca, 0x82, 0xb2, 0xa5, 0xc5, 0xba, 0x3c, 0xd2, 0x83, 0xf5, 0x49, 0x58, 0x22, 0x69, 0xe1, 0x3c, 0x8d, 0xc3, 0x1a, 0xb2, 0x1a,
0x9c, 0xde, 0x67, 0xb8, 0x6d, 0xb1, 0x45, 0xe7, 0x47, 0x7a, 0xb0, 0x3e, 0x09, 0x4b, 0x38, 0x2d, 0x5a, 0xb3, 0x26, 0x7b, 0x6b, 0xef, 0xd8, 0x0b, 0x5f, 0xd2, 0xde, 0x34, 0x76, 0xd4, 0x8d, 0x7e,
0x9c, 0xa7, 0x71, 0x58, 0xc3, 0xad, 0x86, 0xd4, 0xac, 0x01, 0xdf, 0xda, 0x3b, 0xf6, 0xc2, 0x97, 0x0c, 0x16, 0x0b, 0x10, 0x71, 0x83, 0x8d, 0xdd, 0x5b, 0x9a, 0xf0, 0x19, 0x0c, 0x3b, 0x3c, 0x12,
0xb4, 0x37, 0x8d, 0x1d, 0x75, 0xa3, 0x1f, 0x83, 0xc5, 0x02, 0x44, 0xdc, 0x60, 0x63, 0xf7, 0x96, 0x38, 0x0b, 0x77, 0xfa, 0x88, 0xf5, 0xc6, 0x5a, 0x80, 0xca, 0x8a, 0x57, 0x67, 0x68, 0xc6, 0xc6,
0xc6, 0x7c, 0xc6, 0x86, 0x1d, 0x1e, 0x09, 0x7c, 0x0b, 0x77, 0xfa, 0x88, 0xf5, 0xcd, 0x5a, 0x80, 0xc9, 0x78, 0xe2, 0xd5, 0xc8, 0xe4, 0x5d, 0xd6, 0x19, 0x9a, 0x91, 0x39, 0xd7, 0xc0, 0x62, 0x92,
0xca, 0x8a, 0x57, 0x67, 0x68, 0xb6, 0x8d, 0x93, 0xf1, 0xc4, 0xab, 0x91, 0xc9, 0xbb, 0xac, 0x33, 0x49, 0x15, 0x56, 0x7a, 0x6e, 0xf7, 0x8b, 0xfb, 0x4f, 0x1f, 0xb2, 0x0c, 0x03, 0xb0, 0xdc, 0x7b,
0x34, 0x23, 0x73, 0xae, 0x81, 0xc5, 0x38, 0x93, 0x2a, 0xac, 0xf4, 0xdc, 0xee, 0x17, 0xf7, 0x9f, 0xf6, 0xe0, 0x71, 0x77, 0x8f, 0xe5, 0x15, 0x16, 0x90, 0x45, 0x8d, 0x30, 0x20, 0x7f, 0xcd, 0x1c,
0x3e, 0x64, 0x19, 0x06, 0x60, 0xb9, 0xf7, 0xec, 0xc1, 0xe3, 0xee, 0x1e, 0xcb, 0x2b, 0x2c, 0x20, 0xf6, 0xb3, 0x49, 0xa8, 0x1f, 0xfa, 0xec, 0xa4, 0xc8, 0xcb, 0x9f, 0x17, 0xbf, 0xa4, 0xa9, 0xea,
0x8b, 0x12, 0x61, 0x40, 0xfe, 0x9a, 0x39, 0xec, 0x67, 0x93, 0x50, 0x57, 0xfa, 0xec, 0xa4, 0xc8, 0x37, 0x55, 0xa3, 0x24, 0x40, 0xd9, 0x6d, 0xce, 0x89, 0x58, 0x6b, 0x4e, 0xc4, 0x92, 0x4f, 0xc0,
0xcb, 0x9f, 0x17, 0xbf, 0xa4, 0xa9, 0xea, 0x45, 0x55, 0xa3, 0x24, 0x40, 0xd9, 0x89, 0xce, 0x89, 0x0e, 0x42, 0x7f, 0x38, 0x19, 0xd0, 0xfe, 0x34, 0xe4, 0xfc, 0x28, 0x08, 0x0f, 0x99, 0xd6, 0x09,
0x58, 0x6b, 0x4e, 0xc4, 0x92, 0x4f, 0xc0, 0x0e, 0x42, 0x7f, 0x38, 0x19, 0xd0, 0xfe, 0x34, 0xe4, 0x66, 0x9a, 0x0e, 0x52, 0x74, 0x91, 0x60, 0x4f, 0xad, 0xf3, 0xa0, 0x51, 0xdc, 0xbe, 0x38, 0x72,
0xfc, 0x28, 0x08, 0x0f, 0x3d, 0xde, 0x7d, 0xca, 0x4c, 0xd3, 0x41, 0x8a, 0x2e, 0x12, 0xec, 0xa9, 0x3f, 0xf1, 0xe3, 0x60, 0x2c, 0x0b, 0xe9, 0xaa, 0xbb, 0x86, 0x8b, 0xd2, 0x1c, 0x07, 0x62, 0xc9,
0x75, 0x1e, 0x34, 0x6a, 0xb7, 0x2f, 0x54, 0xee, 0x27, 0x7e, 0x1c, 0x8c, 0x53, 0xec, 0x69, 0xd7, 0xf9, 0xab, 0x05, 0x5b, 0x05, 0x13, 0xa0, 0x63, 0xfe, 0x1c, 0x5a, 0x09, 0x9b, 0x68, 0x7c, 0x5e,
0x70, 0x51, 0x9a, 0xe3, 0x40, 0x2c, 0x39, 0x7f, 0xb5, 0x60, 0xab, 0x60, 0x02, 0x74, 0xcc, 0x9f, 0x67, 0x23, 0xd1, 0x3b, 0x2b, 0xb7, 0xfc, 0x96, 0x76, 0xdf, 0x33, 0xb8, 0x77, 0x7a, 0xd8, 0x7f,
0x43, 0x2b, 0x61, 0xd3, 0x8e, 0xcf, 0xeb, 0xac, 0x1a, 0x1d, 0xa4, 0x5b, 0x7e, 0x4b, 0xbb, 0xef, 0xe3, 0xac, 0xd0, 0x54, 0xa2, 0xe4, 0x77, 0xc2, 0xcb, 0x9d, 0x6c, 0x23, 0x0c, 0x33, 0x56, 0x05,
0x19, 0xbb, 0x77, 0x7a, 0xd8, 0x9b, 0xe3, 0x1c, 0xd1, 0x54, 0xac, 0x9e, 0xe0, 0x3c, 0xc1, 0xca, 0x86, 0x56, 0xbc, 0x0d, 0x2d, 0x3c, 0xc8, 0xf8, 0x44, 0x9d, 0x45, 0x3a, 0x41, 0x43, 0xe2, 0xbd,
0x9d, 0x6c, 0x23, 0x0c, 0x33, 0x56, 0x05, 0x86, 0x56, 0xbc, 0x0d, 0x2d, 0x54, 0x64, 0x7c, 0xa2, 0x13, 0x79, 0x0c, 0xfb, 0x3f, 0x15, 0x68, 0x98, 0x1b, 0xf2, 0x21, 0x42, 0x0b, 0x03, 0x3d, 0xdf,
0x74, 0x91, 0x4e, 0xd0, 0x90, 0x78, 0xef, 0x44, 0xaa, 0x61, 0xff, 0xbb, 0x02, 0x0d, 0xf3, 0x40, 0x34, 0x35, 0x5c, 0x64, 0x03, 0xa6, 0x8a, 0x3c, 0x5f, 0x5f, 0x0e, 0x06, 0xb2, 0x26, 0x54, 0x25,
0x3e, 0x60, 0x68, 0x61, 0xa0, 0xe7, 0x9b, 0xa6, 0x86, 0x8b, 0x6c, 0xc0, 0x44, 0x91, 0xfa, 0xf5, 0xd6, 0x15, 0xe3, 0x01, 0xcb, 0xf7, 0xc6, 0x78, 0x81, 0x5f, 0xe4, 0x0a, 0x5c, 0xca, 0x74, 0x5b,
0xe5, 0xa0, 0x22, 0x6b, 0x42, 0x55, 0x62, 0x5d, 0x31, 0xae, 0xb0, 0x7c, 0x6f, 0x8c, 0x1e, 0xf8, 0x14, 0xe2, 0x57, 0xc7, 0xa8, 0x15, 0x97, 0xcb, 0xb3, 0x05, 0xef, 0x75, 0x79, 0x5f, 0x8f, 0xf3,
0x45, 0xae, 0xc0, 0xa5, 0x4c, 0xb6, 0x45, 0xc1, 0x7e, 0x75, 0x8c, 0x52, 0x71, 0xbe, 0x3c, 0x5b, 0x51, 0x15, 0xb1, 0xa7, 0x81, 0x6c, 0xa6, 0x8e, 0xe2, 0x68, 0x34, 0xbd, 0x65, 0xd1, 0xc6, 0xac,
0xf0, 0x5e, 0x97, 0xf7, 0xf5, 0x38, 0x3b, 0x55, 0x11, 0x7b, 0x1a, 0xc8, 0x66, 0xea, 0x28, 0x8e, 0xba, 0x35, 0x0e, 0xaa, 0x9b, 0x75, 0xfe, 0x58, 0x81, 0xcd, 0x83, 0xe0, 0x65, 0x58, 0xe2, 0xa7,
0x46, 0xd3, 0x5b, 0x16, 0x6d, 0xcc, 0xaa, 0x5b, 0xe3, 0xa0, 0xba, 0x59, 0xe7, 0x8f, 0x15, 0xd8, 0x67, 0x55, 0x3a, 0xe6, 0x88, 0x09, 0x8d, 0x03, 0x6f, 0x18, 0xfc, 0xca, 0xcc, 0x0b, 0x18, 0x74,
0x3c, 0x08, 0x5e, 0x86, 0x25, 0x7e, 0x7a, 0x56, 0xa5, 0x63, 0x8e, 0x98, 0xd0, 0x38, 0xf0, 0x86, 0x1b, 0xd9, 0xaa, 0x26, 0x9d, 0xab, 0x15, 0x84, 0x53, 0x83, 0x50, 0x39, 0x54, 0xd6, 0xdd, 0x9a,
0xc1, 0xaf, 0xcc, 0xbc, 0x80, 0x41, 0xb7, 0x91, 0xad, 0x6a, 0xdc, 0xb9, 0x58, 0x41, 0x38, 0x35, 0x00, 0xbb, 0x12, 0x73, 0x5e, 0xc1, 0x56, 0x41, 0x2b, 0x74, 0x9d, 0xdc, 0xbc, 0x5a, 0x29, 0xce,
0x08, 0x95, 0x03, 0x67, 0xdd, 0xad, 0x09, 0xb0, 0x2b, 0x31, 0xe7, 0x15, 0x6c, 0x15, 0xa4, 0x42, 0xab, 0x77, 0x61, 0x73, 0x12, 0x26, 0x8c, 0x9d, 0xa9, 0x65, 0x6e, 0xb5, 0x20, 0xb6, 0x5a, 0x57,
0xd7, 0xc9, 0xcd, 0xb2, 0x95, 0xe2, 0x2c, 0x7b, 0x17, 0x36, 0x27, 0x61, 0xc2, 0xb6, 0x33, 0xb1, 0xab, 0x5d, 0x7d, 0xcb, 0x9f, 0xc0, 0xe5, 0xde, 0xe4, 0x70, 0x18, 0x24, 0xc7, 0x25, 0xb6, 0xf8,
0xcc, 0xa3, 0x16, 0xc4, 0x51, 0xeb, 0x6a, 0xb5, 0xab, 0x1f, 0xf9, 0x13, 0xb8, 0xdc, 0x9b, 0x1c, 0x06, 0x10, 0x14, 0x58, 0xdc, 0xbb, 0x2d, 0x57, 0x34, 0x2e, 0xe7, 0x2a, 0xd8, 0x65, 0xb2, 0x30,
0x0e, 0x83, 0xe4, 0xb8, 0xc4, 0x16, 0xdf, 0x00, 0x82, 0x0c, 0x8b, 0x67, 0xb7, 0xe5, 0x8a, 0xb6, 0x37, 0xbc, 0x03, 0xd7, 0x35, 0x78, 0x3f, 0x4a, 0x83, 0xa3, 0xc0, 0xf7, 0xf4, 0xa2, 0xe6, 0x7c,
0xcb, 0xb9, 0x0a, 0x76, 0x19, 0x2f, 0xcc, 0x0d, 0xef, 0xc0, 0x75, 0x0d, 0xde, 0x8f, 0xd2, 0xe0, 0xb9, 0x00, 0x37, 0x66, 0xd3, 0xa0, 0x25, 0x3e, 0x85, 0xa6, 0x97, 0xa6, 0x9e, 0x7f, 0xcc, 0xd4,
0x28, 0xf0, 0x3d, 0xbd, 0xa8, 0x39, 0x5f, 0x2e, 0xc0, 0x8d, 0xd9, 0x34, 0x68, 0x89, 0x4f, 0xa1, 0x12, 0xb5, 0xe6, 0xcc, 0xd4, 0xde, 0x50, 0xf4, 0x02, 0x4d, 0x78, 0xfd, 0x1d, 0x50, 0x53, 0x02,
0xe9, 0xa5, 0xa9, 0xe7, 0x1f, 0x33, 0xb1, 0x44, 0xad, 0x39, 0x33, 0xb5, 0x37, 0x14, 0xbd, 0x40, 0x37, 0x11, 0x0b, 0x02, 0x05, 0x23, 0xe1, 0xac, 0x02, 0x60, 0x7d, 0xd5, 0x02, 0xc0, 0xf3, 0x51,
0x13, 0x5e, 0x7f, 0x07, 0xd4, 0xe4, 0xc0, 0x4d, 0xc4, 0x82, 0x40, 0xc1, 0x48, 0x38, 0xab, 0x00, 0x89, 0x44, 0x11, 0x4b, 0x54, 0x4e, 0xa4, 0x35, 0xb7, 0x53, 0x64, 0xfc, 0x5c, 0xac, 0x3b, 0xbf,
0x58, 0x5f, 0xb5, 0x00, 0xf0, 0x7c, 0x54, 0xc2, 0x51, 0xc4, 0x12, 0x95, 0x13, 0x69, 0xcd, 0xed, 0xab, 0xc0, 0xf6, 0x01, 0x6b, 0x23, 0xd2, 0x90, 0xf5, 0x6b, 0x65, 0x16, 0x9c, 0x93, 0x65, 0x59,
0x14, 0x37, 0x7e, 0x2e, 0xd6, 0x9d, 0xdf, 0x55, 0x60, 0xfb, 0x80, 0xb5, 0x11, 0x69, 0xc8, 0xfa, 0x31, 0x0f, 0xa3, 0x7e, 0xc8, 0x99, 0xde, 0xf6, 0x99, 0x2b, 0x70, 0x31, 0xc2, 0x65, 0x57, 0xdd,
0xb5, 0x32, 0x0b, 0xce, 0xc9, 0xb2, 0xac, 0x98, 0x87, 0x51, 0x3f, 0xe4, 0x9b, 0xde, 0xf6, 0x99, 0x66, 0x18, 0x09, 0x61, 0x6f, 0x9f, 0x49, 0x98, 0xf7, 0x6c, 0x19, 0xad, 0xa4, 0x94, 0x73, 0x7a,
0x2b, 0x70, 0x36, 0xc2, 0x65, 0x57, 0xdd, 0x66, 0x18, 0x09, 0x66, 0x6f, 0x9f, 0x49, 0x98, 0xf7, 0x5d, 0x51, 0x0a, 0x2d, 0x9c, 0xdf, 0x2f, 0xc0, 0xb5, 0x59, 0xfa, 0xe0, 0x6d, 0xfd, 0x7f, 0x93,
0x6c, 0x19, 0xad, 0xa4, 0x94, 0x73, 0x7f, 0x5d, 0x51, 0x0a, 0x29, 0x9c, 0xdf, 0x2f, 0xc0, 0xb5, 0xc6, 0x23, 0x58, 0x11, 0x6d, 0x14, 0x95, 0xaf, 0x4a, 0x66, 0xde, 0x9c, 0xaf, 0x89, 0x58, 0x66,
0x59, 0xf2, 0xe0, 0x6d, 0xfd, 0x7f, 0x93, 0xc6, 0x23, 0x58, 0x11, 0x6d, 0x14, 0x95, 0x2f, 0x4e, 0x8c, 0xae, 0x92, 0x60, 0x3f, 0x83, 0x15, 0xc4, 0x2e, 0xa2, 0xe5, 0x75, 0xa8, 0x6a, 0xd1, 0x85,
0x66, 0xde, 0x9c, 0x2f, 0x89, 0x58, 0x66, 0x1b, 0x5d, 0xc5, 0xc1, 0x7e, 0x06, 0x2b, 0x88, 0x5d, 0x4a, 0x42, 0x16, 0xc6, 0xce, 0x36, 0x5c, 0x51, 0xc3, 0x72, 0x99, 0x8f, 0xff, 0xb7, 0x02, 0x57,
0x44, 0xca, 0xeb, 0x50, 0xd5, 0xa2, 0x0b, 0x85, 0x84, 0x2c, 0x8c, 0x9d, 0x6d, 0xb8, 0xa2, 0x86, 0xcb, 0xd7, 0x2f, 0x34, 0x7b, 0x9c, 0x67, 0xae, 0x2c, 0x1f, 0x19, 0xad, 0x0b, 0x8d, 0x8c, 0x8b,
0xe5, 0x32, 0x1f, 0xff, 0x6f, 0x05, 0xae, 0x96, 0xaf, 0x5f, 0x68, 0xf6, 0x38, 0xcf, 0x5c, 0x59, 0x17, 0x1a, 0x19, 0x97, 0x66, 0x8c, 0x8c, 0xbf, 0xad, 0xc0, 0xda, 0x5e, 0x4c, 0x59, 0xfb, 0xfe,
0x3e, 0x32, 0x5a, 0x17, 0x1a, 0x19, 0x17, 0x2f, 0x34, 0x32, 0x2e, 0xcd, 0x18, 0x19, 0x7f, 0x5b, 0x5c, 0x5c, 0x97, 0x72, 0xd7, 0x8f, 0xa0, 0x3d, 0xe6, 0x19, 0xc3, 0xef, 0x17, 0x72, 0x6e, 0x4b,
0x81, 0xb5, 0xbd, 0x98, 0xb2, 0xf6, 0xfd, 0xb9, 0xb8, 0x2e, 0xe5, 0xae, 0x1f, 0x41, 0x7b, 0xcc, 0x2e, 0x68, 0xfd, 0x0b, 0xcb, 0x46, 0x6a, 0x92, 0x28, 0xb4, 0x3a, 0x6d, 0x5c, 0xd1, 0xc8, 0x09,
0x33, 0x86, 0xdf, 0x2f, 0xe4, 0xdc, 0x96, 0x5c, 0xd0, 0xfa, 0x17, 0x96, 0x8d, 0xd4, 0x24, 0x51, 0x2c, 0x26, 0x94, 0x0e, 0xb0, 0xbe, 0x89, 0xdf, 0xce, 0x26, 0xac, 0x9b, 0x6a, 0x60, 0x6e, 0xfa,
0x68, 0x75, 0xda, 0xb8, 0xa2, 0x91, 0x13, 0x58, 0x4c, 0x28, 0x1d, 0x60, 0x7d, 0x13, 0xbf, 0x9d, 0x14, 0xda, 0x4f, 0x98, 0x2b, 0x7c, 0x75, 0xe5, 0x9c, 0x75, 0x20, 0xba, 0x04, 0x94, 0xcb, 0xd0,
0x4d, 0x58, 0x37, 0xc5, 0xc0, 0xdc, 0xf4, 0x29, 0xb4, 0x9f, 0x30, 0x57, 0xf8, 0xea, 0xc2, 0x39, 0xbd, 0x61, 0x94, 0x98, 0xa7, 0x76, 0x36, 0x98, 0x31, 0x74, 0x14, 0x89, 0x19, 0x2c, 0x91, 0x87,
0xeb, 0x40, 0x74, 0x0e, 0xc8, 0x97, 0xa1, 0x7b, 0xc3, 0x28, 0x31, 0xb5, 0x76, 0x36, 0x98, 0x31, 0x6f, 0x82, 0x24, 0x7b, 0x29, 0xd9, 0x81, 0x75, 0x13, 0x46, 0x3f, 0x61, 0x05, 0x94, 0x0a, 0x44,
0x74, 0x14, 0x89, 0x19, 0x2c, 0x91, 0x87, 0x6f, 0x82, 0x24, 0x7b, 0x29, 0xd9, 0x81, 0x75, 0x13, 0xe8, 0xc4, 0x06, 0x26, 0xf9, 0xe5, 0x7c, 0x59, 0x81, 0xce, 0x01, 0xef, 0xe6, 0xf7, 0x38, 0x59,
0x46, 0x3f, 0x61, 0x05, 0x94, 0x0a, 0x44, 0xc8, 0xc4, 0x06, 0x26, 0xf9, 0xe5, 0x7c, 0x59, 0x81, 0x98, 0x4c, 0x12, 0x77, 0xec, 0xab, 0x33, 0xb1, 0xd4, 0x87, 0x8f, 0x44, 0x7d, 0x73, 0x0a, 0x6c,
0xce, 0x01, 0xef, 0xe6, 0xf7, 0x38, 0x59, 0x98, 0x4c, 0x12, 0x77, 0xec, 0x2b, 0x9d, 0x58, 0xea, 0x20, 0x8c, 0xe3, 0x22, 0x7f, 0xa3, 0x9b, 0x24, 0xfc, 0xca, 0xa7, 0xae, 0x35, 0xfd, 0xe6, 0x6b,
0xc3, 0x47, 0xa2, 0xbe, 0x39, 0x05, 0x36, 0x10, 0xc6, 0x71, 0x91, 0xbf, 0xe0, 0x4d, 0x12, 0x7e, 0xdc, 0x22, 0x8c, 0x5c, 0x59, 0x77, 0xfa, 0xcd, 0xeb, 0x94, 0x4f, 0x63, 0xf4, 0x6b, 0x8a, 0x05,
0xe5, 0x53, 0xd7, 0x9a, 0x7e, 0xf3, 0x35, 0x6e, 0x11, 0x46, 0xae, 0xac, 0x3b, 0xfd, 0xe6, 0x75, 0x5c, 0x87, 0x9c, 0x2b, 0x70, 0xb9, 0x44, 0x3d, 0x79, 0xa8, 0x5d, 0x77, 0xfa, 0x2e, 0x7d, 0x40,
0xca, 0xa7, 0x31, 0xfa, 0x35, 0xc5, 0x02, 0xae, 0x43, 0xce, 0x15, 0xb8, 0x5c, 0x22, 0x9e, 0x54, 0xe3, 0xd7, 0x81, 0xcf, 0xd3, 0xfd, 0x0a, 0x22, 0xe4, 0xb2, 0x16, 0xec, 0xe6, 0xeb, 0xb5, 0x6d,
0x6a, 0xd7, 0x9d, 0xbe, 0x59, 0x1f, 0xd0, 0xf8, 0x75, 0xe0, 0xf3, 0x74, 0xbf, 0x82, 0x08, 0xb9, 0x97, 0x2d, 0xa1, 0xcc, 0x7f, 0x57, 0xa1, 0x2e, 0x2d, 0xa8, 0x64, 0x7e, 0x0f, 0x16, 0xf9, 0x33,
0xac, 0x05, 0xbb, 0xf9, 0xb2, 0x6d, 0xdb, 0x65, 0x4b, 0xc8, 0xf3, 0x5f, 0x55, 0xa8, 0x4b, 0x0b, 0x1b, 0xd9, 0xd4, 0xb8, 0xb4, 0x67, 0x38, 0x7b, 0xab, 0x80, 0x4f, 0x6b, 0xcf, 0x0a, 0x3e, 0xa7,
0x2a, 0x9e, 0xdf, 0x83, 0x45, 0xfe, 0xcc, 0x46, 0x36, 0xb5, 0x5d, 0xda, 0x33, 0x9c, 0xbd, 0x55, 0x19, 0xca, 0x98, 0x6f, 0x74, 0x86, 0x32, 0xf9, 0xc7, 0x3a, 0x17, 0xea, 0xc6, 0x53, 0x1a, 0xb9,
0xc0, 0xa7, 0xb5, 0x67, 0x05, 0x9f, 0xd3, 0x0c, 0x61, 0xcc, 0x37, 0x3a, 0x43, 0x98, 0xfc, 0x63, 0x5e, 0x7c, 0xe1, 0x32, 0xde, 0xe7, 0xec, 0x1b, 0xb3, 0x09, 0x50, 0xe6, 0x1e, 0xac, 0xaa, 0xb7,
0x9d, 0x0b, 0x75, 0xe3, 0x29, 0x8d, 0x5c, 0x2f, 0xbe, 0x70, 0x19, 0xef, 0x73, 0xf6, 0x8d, 0xd9, 0x31, 0x62, 0x97, 0x3e, 0x98, 0x49, 0x49, 0x57, 0xe6, 0x3c, 0xa6, 0xf1, 0xa3, 0xa9, 0xa7, 0x26,
0x04, 0xc8, 0x73, 0x0f, 0x56, 0xd5, 0xdb, 0x18, 0xb1, 0x4b, 0x1f, 0xcc, 0x24, 0xa7, 0x2b, 0x73, 0xfd, 0x68, 0xe6, 0x7c, 0x6d, 0x1c, 0x2d, 0x3f, 0x0a, 0xbf, 0x80, 0x66, 0x6e, 0x22, 0x23, 0xef,
0x1e, 0xd3, 0xb8, 0x6a, 0xea, 0xa9, 0x49, 0x57, 0xcd, 0x9c, 0xaf, 0x0d, 0xd5, 0xf2, 0xa3, 0xf0, 0x68, 0xe4, 0xe5, 0x83, 0xac, 0xed, 0xcc, 0x23, 0x41, 0xc9, 0x13, 0xe8, 0xcc, 0x6a, 0x0b, 0xc8,
0x0b, 0x68, 0xe6, 0x26, 0x32, 0xf2, 0x8e, 0x46, 0x5e, 0x3e, 0xc8, 0xda, 0xce, 0x3c, 0x12, 0xe4, 0x87, 0xe5, 0x55, 0xb8, 0x2c, 0xf7, 0xda, 0x1f, 0x9d, 0x8b, 0x56, 0x6e, 0x7a, 0xa7, 0x42, 0x22,
0x3c, 0x81, 0xce, 0xac, 0xb6, 0x80, 0x7c, 0x58, 0x5e, 0x85, 0xcb, 0x72, 0xaf, 0xfd, 0xd1, 0xb9, 0xd6, 0x24, 0x96, 0xd6, 0x14, 0x72, 0xfb, 0x1c, 0x65, 0x47, 0x6e, 0xf9, 0xc1, 0xb9, 0x0b, 0x14,
0x68, 0xe5, 0xa1, 0x77, 0x2a, 0x24, 0x62, 0x4d, 0x62, 0x69, 0x4d, 0x21, 0xb7, 0xcf, 0x51, 0x76, 0xdb, 0x30, 0xc8, 0x9e, 0x68, 0x8d, 0xed, 0x6e, 0x95, 0xb8, 0x40, 0xd9, 0x66, 0xef, 0x9f, 0x49,
0xe4, 0x91, 0x1f, 0x9c, 0xbb, 0x40, 0xb1, 0x03, 0x83, 0xec, 0x89, 0xd6, 0x38, 0xee, 0x56, 0x89, 0x37, 0xdd, 0xea, 0x67, 0xd0, 0xca, 0x4f, 0x71, 0xc4, 0x39, 0x7b, 0xe8, 0xb4, 0x6f, 0xce, 0xa5,
0x0b, 0x94, 0x1d, 0xf6, 0xfe, 0x99, 0x74, 0xd3, 0xa3, 0x7e, 0x06, 0xad, 0xfc, 0x14, 0x47, 0x9c, 0xc9, 0x9c, 0xdc, 0x78, 0xc7, 0x33, 0x9c, 0xbc, 0xec, 0xed, 0xd0, 0x70, 0xf2, 0xd2, 0x27, 0x40,
0xb3, 0x87, 0x4e, 0xfb, 0xe6, 0x5c, 0x9a, 0xcc, 0xc9, 0x8d, 0x77, 0x3c, 0xc3, 0xc9, 0xcb, 0xde, 0xf2, 0x18, 0xaa, 0xda, 0x4b, 0x1d, 0xd9, 0xce, 0xbf, 0x9d, 0x99, 0xf2, 0xae, 0xcd, 0x5a, 0xce,
0x0e, 0x0d, 0x27, 0x2f, 0x7d, 0x02, 0x24, 0x8f, 0xa1, 0xaa, 0xbd, 0xd4, 0x91, 0xed, 0xfc, 0xdb, 0x49, 0xc3, 0x6c, 0xb7, 0x3d, 0xf7, 0x25, 0xae, 0x28, 0x2d, 0xf7, 0xa6, 0xc6, 0x8c, 0x99, 0x7f,
0x99, 0xc9, 0xef, 0xda, 0xac, 0xe5, 0x1c, 0x37, 0xcc, 0x76, 0xdb, 0x73, 0x5f, 0xe2, 0x8a, 0xdc, 0xa3, 0x32, 0x8c, 0x39, 0xe3, 0x55, 0xcd, 0x30, 0xe6, 0xac, 0x47, 0x2e, 0x1e, 0x56, 0xb9, 0x89,
0x72, 0x6f, 0x6a, 0xcc, 0x98, 0xf9, 0x37, 0x2a, 0xc3, 0x98, 0x33, 0x5e, 0xd5, 0x0c, 0x63, 0xce, 0xd0, 0x08, 0xab, 0xf2, 0x71, 0xdb, 0x08, 0xab, 0x59, 0xe3, 0x28, 0x93, 0x9c, 0x1b, 0x37, 0x0c,
0x7a, 0xe4, 0xe2, 0x61, 0x95, 0x9b, 0x08, 0x8d, 0xb0, 0x2a, 0x1f, 0xb7, 0x8d, 0xb0, 0x9a, 0x35, 0xc9, 0xe5, 0x03, 0x92, 0x21, 0x79, 0xd6, 0xb4, 0xe2, 0x01, 0x29, 0x4e, 0x02, 0x44, 0xff, 0x0f,
0x8e, 0x32, 0xce, 0xb9, 0x71, 0xc3, 0xe0, 0x5c, 0x3e, 0x20, 0x19, 0x9c, 0x67, 0x4d, 0x2b, 0x1e, 0x6c, 0xe6, 0xd0, 0x61, 0xbf, 0x77, 0x06, 0x15, 0x66, 0xf5, 0xbf, 0x59, 0xaa, 0x5c, 0x3e, 0x8e,
0x90, 0xe2, 0x24, 0x40, 0xf4, 0xff, 0xc7, 0x66, 0x0e, 0x1d, 0xf6, 0x7b, 0x67, 0x50, 0x61, 0x56, 0x3c, 0xd6, 0xc3, 0xa9, 0xdc, 0xfe, 0x04, 0x6a, 0x7a, 0xb9, 0x24, 0xfa, 0xdd, 0x95, 0x94, 0x57,
0xff, 0x9b, 0xa5, 0xca, 0xe5, 0xe3, 0xc8, 0x63, 0x3d, 0x9c, 0xca, 0xed, 0x4f, 0xa0, 0xa6, 0x97, 0xfb, 0xfa, 0xcc, 0x75, 0x3c, 0x0b, 0x13, 0xa8, 0xf7, 0x0c, 0x86, 0xc0, 0x92, 0x9e, 0xc6, 0x10,
0x4b, 0xa2, 0xdf, 0x5d, 0x49, 0x79, 0xb5, 0xaf, 0xcf, 0x5c, 0x47, 0x5d, 0x18, 0x43, 0xbd, 0x67, 0x58, 0xd6, 0x6c, 0x90, 0x2e, 0x40, 0xd6, 0x2a, 0x90, 0xab, 0x1a, 0x79, 0xa1, 0x07, 0xb1, 0xb7,
0x30, 0x18, 0x96, 0xf4, 0x34, 0x06, 0xc3, 0xb2, 0x66, 0x83, 0x74, 0x01, 0xb2, 0x56, 0x81, 0x5c, 0x67, 0xac, 0x66, 0x6e, 0xac, 0x75, 0x12, 0x86, 0x1b, 0x17, 0xfb, 0x0e, 0xc3, 0x8d, 0x4b, 0x1a,
0xd5, 0xc8, 0x0b, 0x3d, 0x88, 0xbd, 0x3d, 0x63, 0x35, 0x73, 0x63, 0xad, 0x93, 0x30, 0xdc, 0xb8, 0x10, 0xf2, 0x0b, 0x68, 0x17, 0x2a, 0x33, 0xd1, 0x7d, 0x74, 0x56, 0x5b, 0x61, 0xbf, 0x3b, 0x9f,
0xd8, 0x77, 0x18, 0x6e, 0x5c, 0xd2, 0x80, 0x90, 0x5f, 0x40, 0xbb, 0x50, 0x99, 0x89, 0xee, 0xa3, 0x48, 0xca, 0x3f, 0x5c, 0x16, 0x7f, 0x43, 0x7f, 0xfb, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x22,
0xb3, 0xda, 0x0a, 0xfb, 0xdd, 0xf9, 0x44, 0x92, 0xff, 0xe1, 0xb2, 0xf8, 0x8b, 0xfa, 0xdb, 0xff, 0xfc, 0x70, 0xb3, 0x93, 0x1e, 0x00, 0x00,
0x0b, 0x00, 0x00, 0xff, 0xff, 0xb2, 0x2a, 0xb8, 0xd3, 0xaf, 0x1e, 0x00, 0x00,
} }

View file

@ -1,4 +1,4 @@
// Copyright (c) 2015 The btcsuite developers // Copyright (c) 2015-2016 The btcsuite developers
// Use of this source code is governed by an ISC // Use of this source code is governed by an ISC
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
@ -119,23 +119,16 @@ func makeTxSummary(w *Wallet, details *wtxmgr.TxDetails) TransactionSummary {
} }
outputs := make([]TransactionSummaryOutput, 0, len(details.MsgTx.TxOut)) outputs := make([]TransactionSummaryOutput, 0, len(details.MsgTx.TxOut))
var credIndex int var credIndex int
for i, txOut := range details.MsgTx.TxOut { for i := range details.MsgTx.TxOut {
mine := len(details.Credits) > credIndex && details.Credits[credIndex].Index == uint32(i) mine := len(details.Credits) > credIndex && details.Credits[credIndex].Index == uint32(i)
if !mine {
continue
}
acct, internal := lookupOutputChain(w, details, details.Credits[credIndex])
output := TransactionSummaryOutput{ output := TransactionSummaryOutput{
Index: uint32(i), Index: uint32(i),
Amount: btcutil.Amount(txOut.Value), Account: acct,
Mine: mine, Internal: internal,
}
if mine {
acct, internal := lookupOutputChain(w, details, details.Credits[credIndex])
output.Account = acct
output.Internal = internal
credIndex++
} else {
_, addresses, _, err := txscript.ExtractPkScriptAddrs(txOut.PkScript, w.chainParams)
if err == nil {
output.Addresses = addresses
}
} }
outputs = append(outputs, output) outputs = append(outputs, output)
} }
@ -143,7 +136,7 @@ func makeTxSummary(w *Wallet, details *wtxmgr.TxDetails) TransactionSummary {
Hash: &details.Hash, Hash: &details.Hash,
Transaction: serializedTx, Transaction: serializedTx,
MyInputs: inputs, MyInputs: inputs,
Outputs: outputs, MyOutputs: outputs,
Fee: fee, Fee: fee,
Timestamp: details.Received.Unix(), Timestamp: details.Received.Unix(),
} }
@ -185,7 +178,7 @@ func relevantAccounts(w *Wallet, m map[uint32]btcutil.Amount, txs []TransactionS
for _, d := range tx.MyInputs { for _, d := range tx.MyInputs {
m[d.PreviousAccount] = 0 m[d.PreviousAccount] = 0
} }
for _, c := range tx.Outputs { for _, c := range tx.MyOutputs {
m[c.Account] = 0 m[c.Account] = 0
} }
} }
@ -356,7 +349,7 @@ type TransactionSummary struct {
Hash *wire.ShaHash Hash *wire.ShaHash
Transaction []byte Transaction []byte
MyInputs []TransactionSummaryInput MyInputs []TransactionSummaryInput
Outputs []TransactionSummaryOutput MyOutputs []TransactionSummaryOutput
Fee btcutil.Amount Fee btcutil.Amount
Timestamp int64 Timestamp int64
} }
@ -371,23 +364,13 @@ type TransactionSummaryInput struct {
PreviousAmount btcutil.Amount PreviousAmount btcutil.Amount
} }
// TransactionSummaryOutput describes a transaction output of a relevant // TransactionSummaryOutput describes wallet properties of a transaction output
// transaction. When the transaction is authored by this wallet, all // controlled by the wallet. The Index field marks the transaction output index
// transaction outputs are considered relevant. The Mine field describes // of the transaction (not included here).
// whether outputs to these authored transactions pay back to the wallet
// (e.g. change) or create an uncontrolled output. For convenience, the
// addresses (if any) of an uncontrolled output are included.
type TransactionSummaryOutput struct { type TransactionSummaryOutput struct {
Index uint32 Index uint32
Amount btcutil.Amount
Mine bool
// Only relevant if mine==true.
Account uint32 Account uint32
Internal bool Internal bool
// Only relevant if mine==false.
Addresses []btcutil.Address
} }
// AccountBalance associates a total (zero confirmation) balance with an // AccountBalance associates a total (zero confirmation) balance with an