@@ -10,6 +10,7 @@ import (
1010 "github.com/code-payments/code-server/pkg/code/config"
1111 "github.com/code-payments/code-server/pkg/solana"
1212 "github.com/mr-tron/base58/base58"
13+ "github.com/pkg/errors"
1314)
1415
1516// Token balance changes as a result of a transaction
@@ -86,48 +87,11 @@ func (r *Record) Unmarshal() (*solana.Transaction, error) {
8687 return & tx , nil
8788}
8889
89- func FromTransaction (tx * solana.Transaction ) (* Record , error ) {
90- sig := tx .Signature ()
91- res := & Record {
92- Signature : base58 .Encode (sig ),
93- Data : tx .Marshal (),
94- ConfirmationState : ConfirmationUnknown ,
95- CreatedAt : time .Now (),
90+ func FromConfirmedTransaction (tx * solana.ConfirmedTransaction ) (* Record , error ) {
91+ if tx .Transaction .Message .Version != solana .MessageVersionLegacy {
92+ return nil , errors .New ("unsupported transaction version" )
9693 }
97- return res , nil
98- }
9994
100- func FromBlockTransaction (tx * solana.BlockTransaction , slot uint64 , t time.Time ) (* Record , error ) {
101- sig := tx .Transaction .Signature ()
102- res := & Record {
103- Signature : base58 .Encode (sig ),
104- Slot : slot ,
105- Data : tx .Transaction .Marshal (),
106- HasErrors : tx .Err != nil ,
107- BlockTime : t ,
108- ConfirmationState : ConfirmationFinalized ,
109- CreatedAt : time .Now (),
110- }
111-
112- if res .HasErrors {
113- res .ConfirmationState = ConfirmationFailed
114- }
115-
116- if tx .Meta != nil {
117- res .Fee = & tx .Meta .Fee
118- }
119-
120- tokenBalances , err := getTokenBalanceSet (tx .Meta , tx .Transaction .Message .Accounts )
121- if err != nil {
122- return nil , err
123- }
124-
125- res .TokenBalances = tokenBalances
126-
127- return res , nil
128- }
129-
130- func FromConfirmedTransaction (tx * solana.ConfirmedTransaction ) (* Record , error ) {
13195 sig := tx .Transaction .Signature ()
13296 res := & Record {
13397 Signature : base58 .Encode (sig ),
@@ -156,49 +120,6 @@ func FromConfirmedTransaction(tx *solana.ConfirmedTransaction) (*Record, error)
156120 return res , nil
157121}
158122
159- func FromLocalSimulation (tx * solana.Transaction , pre , post map [string ]uint64 ) (* Record , error ) {
160- sig := tx .Signature ()
161- res := & Record {
162- Signature : base58 .Encode (sig ),
163- Data : tx .Marshal (),
164- ConfirmationState : ConfirmationUnknown ,
165- CreatedAt : time .Now (),
166- }
167-
168- txBalances := map [string ]* TokenBalance {}
169-
170- for tokenAccount , tokenBalance := range pre {
171- if val , ok := txBalances [tokenAccount ]; ok {
172- val .PreBalance = tokenBalance
173- } else {
174- txBalances [tokenAccount ] = & TokenBalance {
175- Account : tokenAccount ,
176- PreBalance : tokenBalance ,
177- }
178- }
179- }
180-
181- for tokenAccount , tokenBalance := range post {
182- if val , ok := txBalances [tokenAccount ]; ok {
183- val .PostBalance = tokenBalance
184- } else {
185- txBalances [tokenAccount ] = & TokenBalance {
186- Account : tokenAccount ,
187- PostBalance : tokenBalance ,
188- }
189- }
190- }
191-
192- var tokenBalances []* TokenBalance
193- for _ , tb := range txBalances {
194- tokenBalances = append (tokenBalances , tb )
195- }
196-
197- res .TokenBalances = tokenBalances
198-
199- return res , nil
200- }
201-
202123func getTokenBalanceSet (meta * solana.TransactionMeta , accounts []ed25519.PublicKey ) ([]* TokenBalance , error ) {
203124 txBalances := map [string ]* TokenBalance {}
204125
0 commit comments