Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

block.timestamp always 0 when "callcontract" #480

Closed
hayeah opened this issue Jan 30, 2018 · 8 comments
Closed

block.timestamp always 0 when "callcontract" #480

hayeah opened this issue Jan 30, 2018 · 8 comments

Comments

@hayeah
Copy link
Contributor

@hayeah hayeah commented Jan 30, 2018

Describe the issue

block.timestamp always 0 when "callcontract"

Can you reliably reproduce the issue?

yes

If so, please list the steps to reproduce below:

Deploy a contract that uses block.timestamp:

pragma solidity ^0.4.18;

contract BlockTime {

  event BlockTimeEvent(uint256 time);

  // ABI method selector: 87ceff09
  function getBlockTime() constant public returns(uint256) {
    BlockTimeEvent(block.timestamp);
    return block.timestamp;
  }
}

Make an RPC call:

qcli callcontract a07ae04b78b475bacf747f3a47391af418e1a770 87ceff09

The result:

{
  "address": "a07ae04b78b475bacf747f3a47391af418e1a770",
  "executionResult": {
    "gasUsed": 22499,
    "excepted": "None",
    "newAddress": "a07ae04b78b475bacf747f3a47391af418e1a770",
    "output": "0000000000000000000000000000000000000000000000000000000000000000",
    "codeDeposit": 0,
    "gasRefunded": 0,
    "depositSize": 0,
    "gasForDeposit": 0
  },
  "transactionReceipt": {
    "stateRoot": "c0d006ca939565b8a5654c8391ca365193f282677510a5a86cc4935523b635fa",
    "gasUsed": 22499,
    "bloom": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000004000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000
00000004000000000000000000000000000000000000000000",
    "log": [
      {
        "address": "a07ae04b78b475bacf747f3a47391af418e1a770",
        "topics": [
          "834b232e222fd478fbc14dc686a95e5120c477293b9aa05d55cc19491077f49a"
        ],
        "data": "0000000000000000000000000000000000000000000000000000000000000000"
      }
    ]
  }
}

Expected behaviour

block.timestamp should be a time that roughly reflects the current time.

It could either just be the local node's time, or network's median blocktime. Personally I think the local node's time more useful for my use case.

Actual behaviour

The block.timestamp is always 0. This makes it hard to use call to check some time-related conditions. For example, whether current time has past crowdsale start time.

What version of Qtum are you using?

qtumd --version
Qtum Core Daemon version v0.14.13.0-b4e73b7-dirty
@hayeah
Copy link
Contributor Author

@hayeah hayeah commented Jan 30, 2018

Similar issue with a few other globals

pragma solidity ^0.4.18;

contract BlockTime {

  event FooEvent(uint256 time, uint256 blockNumber, address coinbase, bytes32 blockhash, uint256 difficulty);

  function emitFooEvent() constant public returns(uint256, uint256, address, bytes32, uint256) {
    FooEvent(block.timestamp, block.number, block.coinbase, block.blockhash(block.number), block.difficulty);
    return(block.timestamp, block.number, block.coinbase, block.blockhash(block.number), block.difficulty);
  }
}

Behaviour in Ethereum, Rinkeby network:

  • block.timestamp: current time of node
  • block.number: latest mined block number
  • block.coinbase: miner of latest mined block
  • block.blockhash(block.number): 0x0 this is the weird one in ETH... why isn't this the block hash of the latest mined block?
  • block.difficulty: difficult of latest mined block

remix_-_solidity_ide

Loading

designsters pushed a commit that referenced this issue Feb 7, 2018
@qtum-neil
Copy link
Contributor

@qtum-neil qtum-neil commented Feb 8, 2018

Fixed here: 8e22a57

Loading

@qtum-neil qtum-neil closed this Feb 8, 2018
@patidarmanoj10
Copy link

@patidarmanoj10 patidarmanoj10 commented Jan 24, 2019

@qtum-neil I am still getting block.timestamp as 0.

Though block.number return non zero value but block.timestamp is always 0

I am using
qtumd --version
Qtum Core Daemon version v0.16.2.0-47a3046-dirty

Loading

@qtum-neil
Copy link
Contributor

@qtum-neil qtum-neil commented Jan 24, 2019

@patidarmanoj10 I confirm that's a bug, will fix in the next release.
Thanks for reporting!

Loading

@qtum-neil
Copy link
Contributor

@qtum-neil qtum-neil commented Jan 24, 2019

Fixed here: dd6090b

Loading

@patidarmanoj10
Copy link

@patidarmanoj10 patidarmanoj10 commented Jan 25, 2019

@qtum-neil Thanks for proving fix quickly.

I understand this was fixed in past also. was it overwritten in some release? I want to download that version which had fix instead of building it from latest source code because building from source is taking too much time. I am using $docker build --rm -t qtum/qtum:dev .

Loading

@qtum-neil
Copy link
Contributor

@qtum-neil qtum-neil commented Jan 25, 2019

@patidarmanoj10 Yes, the fix was accidentally dropped in a previous release, try version 14.16:

https://github.com/qtumproject/qtum/releases/tag/mainnet-ignition-v0.14.16

A new release including the fix will be made next week.

Loading

1 similar comment
@qtum-neil
Copy link
Contributor

@qtum-neil qtum-neil commented Jan 25, 2019

@patidarmanoj10 Yes, the fix was accidentally dropped in a previous release, try version 14.16:

https://github.com/qtumproject/qtum/releases/tag/mainnet-ignition-v0.14.16

A new release including the fix will be made next week.

Loading

timemarkovqtum pushed a commit that referenced this issue Nov 11, 2019
b19c000063 Merge #607: Use size_t shifts when computing a size_t
4d01bc2d9c Merge #606: travis: Remove unused sudo:false
e6d01e9347 Use size_t shifts when computing a size_t
7667532bd7 travis: Remove unused sudo:false
ee99f12f3d Merge #599: Switch x86_64 asm to use "i" instead of "n" for immediate values.
d58bc93f2c Switch x86_64 asm to use "i" instead of "n" for immediate values.
05362ee042 Merge #597: Add $(COMMON_LIB) to exhaustive tests to fix ARM asm build
83483869ac Add $(COMMON_LIB) to exhaustive tests to fix ARM asm build
aa15154a48 Merge #568: Fix integer overflow in ecmult_multi_var when n is large
2277af5ff0 Fix integer overflow in ecmult_multi_var when n is large
85d0e1bcce Merge #591: Make bench_internal obey secp256k1_fe_sqrt's contract wrt aliasing.
14196379ec Merge #580: Add trivial ecmult_multi algorithm which does not require a scratch space
a697d82da9 Add trivial ecmult_multi to the benchmark tool
bade617417 Add trivial ecmult_multi algorithm. It is selected when no scratch space is given and just multiplies and adds the points.
5545e13dea Merge #584: configure: Use CFLAGS_FOR_BUILD when checking native compiler
20c5869df2 Merge #516: improvements to random seed in src/tests.c
b76e45d5d6 Make bench_internal obey secp256k1_fe_sqrt's contract wrt aliasing.
870a977644 Merge #562: Make use of TAG_PUBKEY constants in secp256k1_eckey_pubkey_parse
be40c4d0b5 Fixup for C90 mixed declarations.
c71dd2c08f Merge #509: Fix algorithm selection in bench_ecmult
6492bf88cc Merge #518: Summarize build options after running configure
0e9ada1941 Merge #567: Correct order of libs returned on pkg-config --libs --static libsecp2…
e96901a4b9 Merge #587: Make randomization of a non-signing context a noop
58df8d03ad Merge #511: Portability fix for the configure scripts generated
2ebdad772a Merge #552: Make constants static:
1c131affd3 Merge #551: secp256k1_fe_sqrt: Verify that the arguments don't alias.
ba698f883b Merge #539: Assorted minor corrections
949e85b009 Merge #550: Optimize secp256k1_fe_normalize_weak calls.
a34bcaadf1 Actually pass CFLAGS_FOR_BUILD and LDFLAGS_FOR_BUILD to linker
2d5f4cebdc configure: Use CFLAGS_FOR_BUILD when checking native compiler
b408c6a8b2 Merge #579: Use __GNUC_PREREQ for detecting __builtin_expect
6198375218 Make randomization of a non-signing context a noop
c663397f46 Use __GNUC_PREREQ for detecting __builtin_expect
e34ceb333b Merge #557: Eliminate scratch memory used when generating contexts
b3bf5f99a3 ecmult_impl: expand comment to explain how effective affine interacts with everything
efa783f8f0 Store z-ratios in the 'x' coord they'll recover
ffd3b346fe add `secp256k1_ge_set_all_gej_var` test which deals with many infinite points
84740acd2a ecmult_impl: save one fe_inv_var
47045270fa ecmult_impl: eliminate scratch memory used when generating context
7f7a2ed3a8 ecmult_gen_impl: eliminate scratch memory used when generating context
314a61d724 Merge #553: add static context object which has no capabilities
89a20a8945 Correct order of libs returned on pkg-config --libs --static libsecp256k1 call.
1086fda4c1 Merge #354: [ECDH API change] Support custom hash function
d3cb1f95eb Make use of TAG_PUBKEY constants in secp256k1_eckey_pubkey_parse
40fde611bd prevent attempts to modify `secp256k1_context_no_precomp`
ed7c08417a add static context object which has no capabilities
496c5b43b8 Make constants static: static const secp256k1_ge secp256k1_ge_const_g; static const int CURVE_B;
bf8b86cc07 secp256k1_fe_sqrt: Verify that the arguments don't alias.
9bd89c836b Optimize secp256k1_fe_normalize_weak calls. Move secp256k1_fe_normalize_weak calls out of ECMULT_TABLE_GET_GE and ECMULT_TABLE_GET_GE_STORAGE and into secp256k1_ge_globalz_set_table_gej instead.
52ab96fedb clean dependendies in field_*_impl.h
deff5edd42 Correct math typos in field_*.h
4efb3f8dd1 Add check that restrict pointers don't alias with all parameters.
1e6f1f5ad5 Merge #529: fix tests.c in the count == 0 case
c8fbc3c397 [ECDH API change] Allow pass arbitrary data to hash function
b00be65056 [ECDH API change] Support custom hash function
95e99f196f fix tests.c in the count == 0 case
452d8e4d2a Merge #523: scratch: add stack frame support
6fe50439ae scratch: add stack frame support
9bc2e26502 Merge #522: parameterize ecmult_const over input size
7c1b91ba4b parameterize ecmult_const over input size
dbc3ddd5e2 Merge #513: Increase sparsity of pippenger fixed window naf representation
3965027c81 Summarize build options in configure script
0f0517369c Fix algorithm selection in bench_ecmult
fb9271dcf0 Merge #510: add a couple missing `const`s to ecmult_pippenger_wnaf
cd5f6028e5 Merge #515: Fix typo
09146ae854 Merge #512: secp256k1_ec_privkey_negate - fix documentation
ec0a7b3ae3 Don't touch leading zeros in wnaf_fixed.
9e36d1bfe2 Fix bug in wnaf_fixed where the wnaf array is not completely zeroed when given a 0 scalar.
96f68a0afc Don't invert scalar in wnaf_fixed when it is even because a caller might intentionally give a scalar with many leading zeros.
8b3841c91d fix bug in fread() failure check
cddef0c0be tests: add warning message when /dev/urandom fails
9b7c47a21e Fix typo
6dbb007869 Increase sparsity of pippenger fixed window naf representation
1646ace4d5 secp256k1_ec_privkey_negate - fix documentation
270f6c80db Portability fix for the configure scripts generated
9b3ff0309d add a couple missing `const`s to ecmult_pippenger_wnaf
cd329dbc3e Merge #460: [build] Update ax_jni_include_dir.m4 macro
7f9c1a1565 Merge #498: tests: Avoid calling fclose(...) with an invalid argument
f99aa8d4d3 Merge #499: tests: Make sure we get the requested number of bytes from /dev/urandom
b549d3d5f7 Merge #472: [build] Set --enable-jni to no by default instead of auto.
d333521516 Merge #494: Support OpenSSL versions >= 1.1 for ENABLE_OPENSSL_TESTS
2ef8ea5d21 Merge #495: Add bench_ecmult to .gitignore
82a96e4587 tests: Make sure we get the requested number of bytes from /dev/urandom
5aae5b5bb2 Avoid calling fclose(...) with an invalid argument
cb32940df3 Add bench_ecmult to .gitignore
31abd3ab8d Support OpenSSL versions >= 1.1 for ENABLE_OPENSSL_TESTS
c95f6f1360 Merge #487: fix tests typo, s/changed/unchanged
fb46c83881 Merge #463: Reduce usage of hardcoded size constants
02f5001dfc Merge #490: Disambiguate bench functions and types
1f46d6089e Disambiguate bench functions and types
f54c6c5083 Merge #480: Enable benchmark building by default
c77fc08597 Merge #486: Add pippenger_wnaf for multi-multiplication
d2f9c6b5dc Use more precise pippenger bucket windows
4c950bbeaf Save some additions per window in _pippenger_wnaf
a58f543f5a Add flags for choosing algorithm in ecmult_multi benchmark
36b22c9337 Use scratch space dependent batching in ecmult_multi
355a38f113 Add pippenger_wnaf ecmult_multi
bc65aa794e Add bench_ecmult
dba5471b69 Add ecmult_multi tests
8c1c831bdb Generalize Strauss to support multiple points
548de42ecf add resizeable scratch space API
0e96cdc6b6 fix typo, s/changed/unchanged
c7680e570f Reduce usage of hardcoded size constants
6ad5cdb42a Merge #479: Get rid of reserved _t in type names
7a78f60598 Print whether we're building benchmarks
4afec9f1ae Build benchmarks by default
d1dc9dfc0a Get rid of reserved _t in type names
57752d28b3 [build] Set --enable-jni to no by default instead of auto.
e7daa9b3c2 [build] Tweak JNI macro to warn instead of error for JNI not found.
5b22977922 [build] Update ax_jni_include_dir.m4 macro to deal with recent versions of macOS

git-subtree-dir: src/secp256k1
git-subtree-split: b19c000063be11018b4d1a6b0a85871ab9d0bdcf
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
3 participants