Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
7d0348e4
Commit
7d0348e4
authored
Apr 01, 2014
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Handle contract messages
parent
7277c420
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
20 additions
and
10 deletions
+20
-10
state_manager.go
ethchain/state_manager.go
+13
-5
transaction_pool.go
ethchain/transaction_pool.go
+7
-5
No files found.
ethchain/state_manager.go
View file @
7d0348e4
...
@@ -114,13 +114,18 @@ func (sm *StateManager) ApplyTransactions(block *Block, txs []*Transaction) {
...
@@ -114,13 +114,18 @@ func (sm *StateManager) ApplyTransactions(block *Block, txs []*Transaction) {
// Figure out if the address this transaction was sent to is a
// Figure out if the address this transaction was sent to is a
// contract or an actual account. In case of a contract, we process that
// contract or an actual account. In case of a contract, we process that
// contract instead of moving funds between accounts.
// contract instead of moving funds between accounts.
var
err
error
if
contract
:=
sm
.
procState
.
GetContract
(
tx
.
Recipient
);
contract
!=
nil
{
if
contract
:=
sm
.
procState
.
GetContract
(
tx
.
Recipient
);
contract
!=
nil
{
sm
.
ProcessContract
(
contract
,
tx
,
block
)
err
=
sm
.
Ethereum
.
TxPool
()
.
ProcessTransaction
(
tx
,
sm
.
procState
,
true
)
}
else
{
if
err
==
nil
{
err
:=
sm
.
Ethereum
.
TxPool
()
.
ProcessTransaction
(
tx
,
block
)
sm
.
ProcessContract
(
contract
,
tx
,
block
)
if
err
!=
nil
{
ethutil
.
Config
.
Log
.
Infoln
(
"[STATE]"
,
err
)
}
}
}
else
{
err
=
sm
.
Ethereum
.
TxPool
()
.
ProcessTransaction
(
tx
,
sm
.
procState
,
false
)
}
if
err
!=
nil
{
ethutil
.
Config
.
Log
.
Infoln
(
"[STATE]"
,
err
)
}
}
}
}
}
}
...
@@ -318,4 +323,7 @@ func (sm *StateManager) ProcessContract(contract *Contract, tx *Transaction, blo
...
@@ -318,4 +323,7 @@ func (sm *StateManager) ProcessContract(contract *Contract, tx *Transaction, blo
txData
:
nil
,
txData
:
nil
,
})
})
closure
.
Call
(
vm
,
nil
)
closure
.
Call
(
vm
,
nil
)
// Update the account (refunds)
sm
.
procState
.
UpdateAccount
(
tx
.
Sender
(),
caller
)
}
}
ethchain/transaction_pool.go
View file @
7d0348e4
...
@@ -90,7 +90,7 @@ func (pool *TxPool) addTransaction(tx *Transaction) {
...
@@ -90,7 +90,7 @@ func (pool *TxPool) addTransaction(tx *Transaction) {
// Process transaction validates the Tx and processes funds from the
// Process transaction validates the Tx and processes funds from the
// sender to the recipient.
// sender to the recipient.
func
(
pool
*
TxPool
)
ProcessTransaction
(
tx
*
Transaction
,
block
*
Block
)
(
err
error
)
{
func
(
pool
*
TxPool
)
ProcessTransaction
(
tx
*
Transaction
,
state
*
State
,
toContract
bool
)
(
err
error
)
{
defer
func
()
{
defer
func
()
{
if
r
:=
recover
();
r
!=
nil
{
if
r
:=
recover
();
r
!=
nil
{
log
.
Println
(
r
)
log
.
Println
(
r
)
...
@@ -98,7 +98,7 @@ func (pool *TxPool) ProcessTransaction(tx *Transaction, block *Block) (err error
...
@@ -98,7 +98,7 @@ func (pool *TxPool) ProcessTransaction(tx *Transaction, block *Block) (err error
}
}
}()
}()
// Get the sender
// Get the sender
sender
:=
block
.
state
.
GetAccount
(
tx
.
Sender
())
sender
:=
state
.
GetAccount
(
tx
.
Sender
())
// Make sure there's enough in the sender's account. Having insufficient
// Make sure there's enough in the sender's account. Having insufficient
// funds won't invalidate this transaction but simple ignores it.
// funds won't invalidate this transaction but simple ignores it.
...
@@ -116,13 +116,15 @@ func (pool *TxPool) ProcessTransaction(tx *Transaction, block *Block) (err error
...
@@ -116,13 +116,15 @@ func (pool *TxPool) ProcessTransaction(tx *Transaction, block *Block) (err error
}
}
// Get the receiver
// Get the receiver
receiver
:=
block
.
state
.
GetAccount
(
tx
.
Recipient
)
receiver
:=
state
.
GetAccount
(
tx
.
Recipient
)
sender
.
Nonce
+=
1
sender
.
Nonce
+=
1
// Send Tx to self
// Send Tx to self
if
bytes
.
Compare
(
tx
.
Recipient
,
tx
.
Sender
())
==
0
{
if
bytes
.
Compare
(
tx
.
Recipient
,
tx
.
Sender
())
==
0
{
// Subtract the fee
// Subtract the fee
sender
.
Amount
.
Sub
(
sender
.
Amount
,
new
(
big
.
Int
)
.
Mul
(
TxFee
,
TxFeeRat
))
sender
.
Amount
.
Sub
(
sender
.
Amount
,
new
(
big
.
Int
)
.
Mul
(
TxFee
,
TxFeeRat
))
}
else
if
toContract
{
sender
.
Amount
.
Sub
(
sender
.
Amount
,
new
(
big
.
Int
)
.
Mul
(
TxFee
,
TxFeeRat
))
}
else
{
}
else
{
// Subtract the amount from the senders account
// Subtract the amount from the senders account
sender
.
Amount
.
Sub
(
sender
.
Amount
,
totAmount
)
sender
.
Amount
.
Sub
(
sender
.
Amount
,
totAmount
)
...
@@ -130,10 +132,10 @@ func (pool *TxPool) ProcessTransaction(tx *Transaction, block *Block) (err error
...
@@ -130,10 +132,10 @@ func (pool *TxPool) ProcessTransaction(tx *Transaction, block *Block) (err error
// Add the amount to receivers account which should conclude this transaction
// Add the amount to receivers account which should conclude this transaction
receiver
.
Amount
.
Add
(
receiver
.
Amount
,
tx
.
Value
)
receiver
.
Amount
.
Add
(
receiver
.
Amount
,
tx
.
Value
)
block
.
state
.
UpdateAccount
(
tx
.
Recipient
,
receiver
)
state
.
UpdateAccount
(
tx
.
Recipient
,
receiver
)
}
}
block
.
state
.
UpdateAccount
(
tx
.
Sender
(),
sender
)
state
.
UpdateAccount
(
tx
.
Sender
(),
sender
)
log
.
Printf
(
"[TXPL] Processed Tx %x
\n
"
,
tx
.
Hash
())
log
.
Printf
(
"[TXPL] Processed Tx %x
\n
"
,
tx
.
Hash
())
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment