Comments (4)
BTW, if anybody wants to confirm this is a bug and point me in the right direction to fixing it, I'm happy to take a look. I'm still pretty new to the codebase so just want to make sure I'm not missing something.
from neo-boa.
@slipo can you post the entire contract file for more context?
from neo-boa.
Sure.
Here's example 1 which works:
from boa.blockchain.vm.Neo.Runtime import GetTrigger
from boa.blockchain.vm.Neo.TriggerType import Application, Verification
from boa.blockchain.vm.System.ExecutionEngine import GetScriptContainer
from boa.blockchain.vm.Neo.Storage import GetContext
from boa.blockchain.vm.Neo.Transaction import GetUnspentCoins, GetHash
def Main(operation, args):
trigger = GetTrigger()
if trigger == Application():
if operation == 'deposit':
tx = GetScriptContainer()
tx_hash = tx.Hash
print(tx_hash)
return False
Here's example 2 which adds a call to Input.GetHash
thereby breaking tx.Hash
:
from boa.blockchain.vm.Neo.Runtime import GetTrigger
from boa.blockchain.vm.Neo.TriggerType import Application, Verification
from boa.blockchain.vm.System.ExecutionEngine import GetScriptContainer
from boa.blockchain.vm.Neo.Storage import GetContext
from boa.blockchain.vm.Neo.Transaction import GetInputs, GetUnspentCoins
from boa.blockchain.vm.Neo.Input import GetIndex, GetHash
def Main(operation, args):
trigger = GetTrigger()
if trigger == Verification():
tx = GetScriptContainer()
valid = True
for input in tx.Inputs:
hash = GetHash(input)
print(hash)
return valid
elif trigger == Application():
if operation == 'deposit':
tx = GetScriptContainer()
tx_hash = tx.Hash
print(tx_hash)
return False
Note: I don't even need to import Transaction.GetHash
in this. And I haven't found a way to import it so it doesn't conflict with Input.GetHash
.
When I run testinvoke EXAMPLE_2_SCRIPT_HASH deposit [] --attach-gas=1
I get errors like:
[E 180208 03:24:18 ExecutionEngine:852] COULD NOT EXECUTE OP: Invalid list operation b'\x9c' NUMEQUAL
[E 180208 03:24:18 ExecutionEngine:853] Invalid list operation
Originally somehow I think I saw an error related to Input's PrevHash
not existing in tx
which was my original clue of this issue.
from neo-boa.
This is a little tricky since there's three things named GetHash
in the interop
module. Without type checking in python it's difficult to tell which one to use. Regardless, there is a workaround in the new version of the compiler. If you want to use tx.Hash
and input.Hash
in the same contract, you should use the long form version of the input.Hash attr accessor, which is GetInputHash(input)
You can see an example here, which uses both in the same contract: https://github.com/CityOfZion/neo-boa/blob/master/boa_test/example/blockchain/TransactionTest.py#L88
from neo-boa.
Related Issues (20)
- Crowdsale Demo directory shouldn't be labeled "nex" HOT 1
- Crowdsale demo and nep5 demo should be the same style HOT 1
- The method to_s(), which generates the output of the executable in readable format, is outdated
- [Feature] Use Python assert in smart contract HOT 4
- Smart Contract Migration results in different return value HOT 1
- Add support for multi-line invocation
- Neo 3x support HOT 2
- Built-in command line interface for neo-boa HOT 1
- support for avmdbgnfo format HOT 4
- replace coz-bytecode dependency with official bytecode project HOT 1
- .abi.json support HOT 3
- Python typehinting support
- About NEP-5 Smart Contract
- Generating incorrect hash for ABI file HOT 1
- Visual DevTracker deploy function not detecting contracts compiled with neo-boa
- negative shift count error when running unit test HOT 1
- Convert byte array to number ? HOT 1
- Invoking Neo.Contract.IsPayable fails HOT 1
- Crowdsale Demo totalSupply returns circulation
- Crowdsale Demo Contract missing OnTransfer event in deploy
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from neo-boa.