Merge branch 'menu' of github.com:paritytech/parity into menu

This commit is contained in:
oconnorct1 2017-05-09 21:07:10 -04:00
commit f014891288
389 changed files with 2259 additions and 936 deletions

View File

@ -254,7 +254,7 @@ linux-armv7:
- cat .cargo/config - cat .cargo/config
- cargo build -j $(nproc) --target $PLATFORM --features final --release $CARGOFLAGS - cargo build -j $(nproc) --target $PLATFORM --features final --release $CARGOFLAGS
- arm-linux-gnueabihf-strip target/$PLATFORM/release/parity - arm-linux-gnueabihf-strip target/$PLATFORM/release/parity
- export SHA3=$(rhash --sha3-256 ~/Core/parity/target/release/parity -p %h) - export SHA3=$(rhash --sha3-256 target/$PLATFORM/release/parity -p %h)
- md5sum target/$PLATFORM/release/parity > parity.md5 - md5sum target/$PLATFORM/release/parity > parity.md5
- sh scripts/deb-build.sh armhf - sh scripts/deb-build.sh armhf
- cp target/$PLATFORM/release/parity deb/usr/bin/parity - cp target/$PLATFORM/release/parity deb/usr/bin/parity
@ -300,7 +300,7 @@ linux-arm:
- cat .cargo/config - cat .cargo/config
- cargo build -j $(nproc) --target $PLATFORM --features final --release $CARGOFLAGS - cargo build -j $(nproc) --target $PLATFORM --features final --release $CARGOFLAGS
- arm-linux-gnueabihf-strip target/$PLATFORM/release/parity - arm-linux-gnueabihf-strip target/$PLATFORM/release/parity
- export SHA3=$(rhash --sha3-256 ~/Core/parity/target/release/parity -p %h) - export SHA3=$(rhash --sha3-256 target/$PLATFORM/release/parity -p %h)
- md5sum target/$PLATFORM/release/parity > parity.md5 - md5sum target/$PLATFORM/release/parity > parity.md5
- sh scripts/deb-build.sh armhf - sh scripts/deb-build.sh armhf
- cp target/$PLATFORM/release/parity deb/usr/bin/parity - cp target/$PLATFORM/release/parity deb/usr/bin/parity
@ -346,7 +346,7 @@ linux-armv6:
- cat .cargo/config - cat .cargo/config
- cargo build -j $(nproc) --target $PLATFORM --features final --release $CARGOFLAGS - cargo build -j $(nproc) --target $PLATFORM --features final --release $CARGOFLAGS
- arm-linux-gnueabi-strip target/$PLATFORM/release/parity - arm-linux-gnueabi-strip target/$PLATFORM/release/parity
- export SHA3=$(rhash --sha3-256 ~/Core/parity/target/release/parity -p %h) - export SHA3=$(rhash --sha3-256 target/$PLATFORM/release/parity -p %h)
- md5sum target/$PLATFORM/release/parity > parity.md5 - md5sum target/$PLATFORM/release/parity > parity.md5
- aws configure set aws_access_key_id $s3_key - aws configure set aws_access_key_id $s3_key
- aws configure set aws_secret_access_key $s3_secret - aws configure set aws_secret_access_key $s3_secret
@ -385,7 +385,7 @@ linux-aarch64:
- cat .cargo/config - cat .cargo/config
- cargo build -j $(nproc) --target $PLATFORM --features final --release $CARGOFLAGS - cargo build -j $(nproc) --target $PLATFORM --features final --release $CARGOFLAGS
- aarch64-linux-gnu-strip target/$PLATFORM/release/parity - aarch64-linux-gnu-strip target/$PLATFORM/release/parity
- export SHA3=$(rhash --sha3-256 ~/Core/parity/target/release/parity -p %h) - export SHA3=$(rhash --sha3-256 target/$PLATFORM/release/parity -p %h)
- md5sum target/$PLATFORM/release/parity > parity.md5 - md5sum target/$PLATFORM/release/parity > parity.md5
- sh scripts/deb-build.sh arm64 - sh scripts/deb-build.sh arm64
- cp target/$PLATFORM/release/parity deb/usr/bin/parity - cp target/$PLATFORM/release/parity deb/usr/bin/parity
@ -522,10 +522,10 @@ docker-build:
script: script:
- if [ "$CI_BUILD_REF_NAME" == "beta-release" ]; then DOCKER_TAG="latest"; else DOCKER_TAG=$CI_BUILD_REF_NAME; fi - if [ "$CI_BUILD_REF_NAME" == "beta-release" ]; then DOCKER_TAG="latest"; else DOCKER_TAG=$CI_BUILD_REF_NAME; fi
- docker login -u $Docker_Hub_User -p $Docker_Hub_Pass - docker login -u $Docker_Hub_User -p $Docker_Hub_Pass
- sh scripts/docker-build.sh $DOCKER_TAG - sh scripts/docker-build.sh $DOCKER_TAG ethcore
- docker logout - docker logout
- docker login -u $Docker_Hub_User_Parity -p $Docker_Hub_Pass_Parity - docker login -u $Docker_Hub_User_Parity -p $Docker_Hub_Pass_Parity
- sh scripts/docker-build.sh $DOCKER_TAG - sh scripts/docker-build.sh $DOCKER_TAG parity
- docker logout - docker logout
tags: tags:
- docker - docker

15
Cargo.lock generated
View File

@ -1705,6 +1705,7 @@ dependencies = [
"jsonrpc-ipc-server 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)", "jsonrpc-ipc-server 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
"jsonrpc-macros 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)", "jsonrpc-macros 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
"jsonrpc-minihttp-server 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)", "jsonrpc-minihttp-server 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
"jsonrpc-pubsub 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
"jsonrpc-ws-server 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)", "jsonrpc-ws-server 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
"log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"multihash 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "multihash 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1712,6 +1713,7 @@ dependencies = [
"parity-reactor 0.1.0", "parity-reactor 0.1.0",
"parity-updater 1.7.0", "parity-updater 1.7.0",
"pretty_assertions 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "pretty_assertions 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
"rlp 0.1.0", "rlp 0.1.0",
"rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", "rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1721,6 +1723,7 @@ dependencies = [
"serde_json 0.9.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 0.9.5 (registry+https://github.com/rust-lang/crates.io-index)",
"stats 0.1.0", "stats 0.1.0",
"time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio-timer 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"transient-hashmap 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "transient-hashmap 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
@ -1778,7 +1781,7 @@ dependencies = [
[[package]] [[package]]
name = "parity-ui-precompiled" name = "parity-ui-precompiled"
version = "1.4.0" version = "1.4.0"
source = "git+https://github.com/paritytech/js-precompiled.git#15530d00f0a48462e764a909e15a0c74870b1fad" source = "git+https://github.com/paritytech/js-precompiled.git#0826776d9190ee6945bfe481e10b19ec05b3a049"
dependencies = [ dependencies = [
"parity-dapps-glue 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "parity-dapps-glue 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
@ -2553,6 +2556,15 @@ dependencies = [
"futures 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "tokio-timer"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"futures 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
"slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "tokio-uds" name = "tokio-uds"
version = "0.1.4" version = "0.1.4"
@ -2986,6 +2998,7 @@ dependencies = [
"checksum tokio-proto 0.1.0 (git+https://github.com/tomusdrw/tokio-proto)" = "<none>" "checksum tokio-proto 0.1.0 (git+https://github.com/tomusdrw/tokio-proto)" = "<none>"
"checksum tokio-proto 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7c0d6031f94d78d7b4d509d4a7c5e1cdf524a17e7b08d1c188a83cf720e69808" "checksum tokio-proto 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7c0d6031f94d78d7b4d509d4a7c5e1cdf524a17e7b08d1c188a83cf720e69808"
"checksum tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "24da22d077e0f15f55162bdbdc661228c1581892f52074fb242678d015b45162" "checksum tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "24da22d077e0f15f55162bdbdc661228c1581892f52074fb242678d015b45162"
"checksum tokio-timer 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "86f33def658c14724fc13ec6289b3875a8152ee8ae767a5b1ccbded363b03db8"
"checksum tokio-uds 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "bd209039933255ea77c6d7a1d18abc20b997d161acb900acca6eb74cdd049f31" "checksum tokio-uds 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "bd209039933255ea77c6d7a1d18abc20b997d161acb900acca6eb74cdd049f31"
"checksum toml 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "fcd27a04ca509aff336ba5eb2abc58d456f52c4ff64d9724d88acb85ead560b6" "checksum toml 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "fcd27a04ca509aff336ba5eb2abc58d456f52c4ff64d9724d88acb85ead560b6"
"checksum toml 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a442dfc13508e603c3f763274361db7f79d7469a0e95c411cde53662ab30fc72" "checksum toml 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a442dfc13508e603c3f763274361db7f79d7469a0e95c411cde53662ab30fc72"

View File

@ -377,7 +377,7 @@ impl Client {
let chain = self.chain.read(); let chain = self.chain.read();
// Check the block isn't so old we won't be able to enact it. // Check the block isn't so old we won't be able to enact it.
let best_block_number = chain.best_block_number(); let best_block_number = chain.best_block_number();
if best_block_number >= self.history && header.number() <= best_block_number - self.history { if self.pruning_info().earliest_state > header.number() {
warn!(target: "client", "Block import failed for #{} ({})\nBlock is ancient (current best block: #{}).", header.number(), header.hash(), best_block_number); warn!(target: "client", "Block import failed for #{} ({})\nBlock is ancient (current best block: #{}).", header.number(), header.hash(), best_block_number);
return Err(()); return Err(());
} }
@ -770,7 +770,7 @@ impl Client {
let db = self.state_db.lock().boxed_clone(); let db = self.state_db.lock().boxed_clone();
// early exit for pruned blocks // early exit for pruned blocks
if db.is_pruned() && self.chain.read().best_block_number() >= block_number + self.history { if db.is_pruned() && self.pruning_info().earliest_state > block_number {
return None; return None;
} }
@ -871,7 +871,7 @@ impl Client {
let best_block_number = self.chain_info().best_block_number; let best_block_number = self.chain_info().best_block_number;
let block_number = self.block_number(at).ok_or(snapshot::Error::InvalidStartingBlock(at))?; let block_number = self.block_number(at).ok_or(snapshot::Error::InvalidStartingBlock(at))?;
if best_block_number > self.history + block_number && db.is_pruned() { if db.is_pruned() && self.pruning_info().earliest_state > block_number {
return Err(snapshot::Error::OldBlockPrunedDB.into()); return Err(snapshot::Error::OldBlockPrunedDB.into());
} }
@ -1354,8 +1354,7 @@ impl BlockChainClient for Client {
.collect(); .collect();
match (transaction, previous_receipts) { match (transaction, previous_receipts) {
(Some(transaction), Some(previous_receipts)) => { (Some(transaction), Some(previous_receipts)) => {
let schedule = self.engine().schedule(block_number); Some(transaction_receipt(self.engine(), transaction, previous_receipts))
Some(transaction_receipt(&schedule, transaction, previous_receipts))
}, },
_ => None, _ => None,
} }
@ -1748,7 +1747,7 @@ impl Drop for Client {
/// Returns `LocalizedReceipt` given `LocalizedTransaction` /// Returns `LocalizedReceipt` given `LocalizedTransaction`
/// and a vector of receipts from given block up to transaction index. /// and a vector of receipts from given block up to transaction index.
fn transaction_receipt(schedule: &Schedule, mut tx: LocalizedTransaction, mut receipts: Vec<Receipt>) -> LocalizedReceipt { fn transaction_receipt(engine: &Engine, mut tx: LocalizedTransaction, mut receipts: Vec<Receipt>) -> LocalizedReceipt {
assert_eq!(receipts.len(), tx.transaction_index + 1, "All previous receipts are provided."); assert_eq!(receipts.len(), tx.transaction_index + 1, "All previous receipts are provided.");
let sender = tx.sender(); let sender = tx.sender();
@ -1772,7 +1771,7 @@ fn transaction_receipt(schedule: &Schedule, mut tx: LocalizedTransaction, mut re
gas_used: receipt.gas_used - prior_gas_used, gas_used: receipt.gas_used - prior_gas_used,
contract_address: match tx.action { contract_address: match tx.action {
Action::Call(_) => None, Action::Call(_) => None,
Action::Create => Some(contract_address(schedule.create_address, &sender, &tx.nonce, &tx.data.sha3())) Action::Create => Some(contract_address(engine.create_address_scheme(block_number), &sender, &tx.nonce, &tx.data.sha3()))
}, },
logs: receipt.logs.into_iter().enumerate().map(|(i, log)| LocalizedLogEntry { logs: receipt.logs.into_iter().enumerate().map(|(i, log)| LocalizedLogEntry {
entry: log, entry: log,
@ -1827,17 +1826,17 @@ mod tests {
#[test] #[test]
fn should_return_correct_log_index() { fn should_return_correct_log_index() {
use super::transaction_receipt; use super::transaction_receipt;
use evm::schedule::Schedule;
use ethkey::KeyPair; use ethkey::KeyPair;
use log_entry::{LogEntry, LocalizedLogEntry}; use log_entry::{LogEntry, LocalizedLogEntry};
use receipt::{Receipt, LocalizedReceipt}; use receipt::{Receipt, LocalizedReceipt};
use transaction::{Transaction, LocalizedTransaction, Action}; use transaction::{Transaction, LocalizedTransaction, Action};
use util::Hashable; use util::Hashable;
use tests::helpers::TestEngine;
// given // given
let key = KeyPair::from_secret_slice(&"test".sha3()).unwrap(); let key = KeyPair::from_secret_slice(&"test".sha3()).unwrap();
let secret = key.secret(); let secret = key.secret();
let schedule = Schedule::new_homestead(); let engine = TestEngine::new(0);
let block_number = 1; let block_number = 1;
let block_hash = 5.into(); let block_hash = 5.into();
@ -1881,7 +1880,7 @@ mod tests {
}]; }];
// when // when
let receipt = transaction_receipt(&schedule, transaction, receipts); let receipt = transaction_receipt(&engine, transaction, receipts);
// then // then
assert_eq!(receipt, LocalizedReceipt { assert_eq!(receipt, LocalizedReceipt {

View File

@ -48,6 +48,7 @@ use receipt::Receipt;
use snapshot::SnapshotComponents; use snapshot::SnapshotComponents;
use spec::CommonParams; use spec::CommonParams;
use transaction::{UnverifiedTransaction, SignedTransaction}; use transaction::{UnverifiedTransaction, SignedTransaction};
use evm::CreateContractAddress;
use ethkey::Signature; use ethkey::Signature;
use util::*; use util::*;
@ -294,4 +295,9 @@ pub trait Engine : Sync + Send {
fn snapshot_components(&self) -> Option<Box<SnapshotComponents>> { fn snapshot_components(&self) -> Option<Box<SnapshotComponents>> {
None None
} }
/// Returns new contract address generation scheme at given block number.
fn create_address_scheme(&self, number: BlockNumber) -> CreateContractAddress {
if number >= self.params().eip86_transition { CreateContractAddress::FromCodeHash } else { CreateContractAddress::FromSenderAndNonce }
}
} }

View File

@ -278,7 +278,7 @@ lazy_static! {
arr[RETURN as usize] = InstructionInfo::new("RETURN", 0, 2, 0, true, GasPriceTier::Zero); arr[RETURN as usize] = InstructionInfo::new("RETURN", 0, 2, 0, true, GasPriceTier::Zero);
arr[DELEGATECALL as usize] = InstructionInfo::new("DELEGATECALL", 0, 6, 1, true, GasPriceTier::Special); arr[DELEGATECALL as usize] = InstructionInfo::new("DELEGATECALL", 0, 6, 1, true, GasPriceTier::Special);
arr[SUICIDE as usize] = InstructionInfo::new("SUICIDE", 0, 1, 0, true, GasPriceTier::Special); arr[SUICIDE as usize] = InstructionInfo::new("SUICIDE", 0, 1, 0, true, GasPriceTier::Special);
arr[CREATE_P2SH as usize] = InstructionInfo::new("CREATE_P2SH", 0, 3, 1, true, GasPriceTier::Special); arr[CREATE2 as usize] = InstructionInfo::new("CREATE2", 0, 3, 1, true, GasPriceTier::Special);
arr arr
}; };
} }
@ -555,7 +555,7 @@ pub const RETURN: Instruction = 0xf3;
/// like CALLCODE but keeps caller's value and sender /// like CALLCODE but keeps caller's value and sender
pub const DELEGATECALL: Instruction = 0xf4; pub const DELEGATECALL: Instruction = 0xf4;
/// create a new account and set creation address to sha3(sender + sha3(init code)) % 2**160 /// create a new account and set creation address to sha3(sender + sha3(init code)) % 2**160
pub const CREATE_P2SH: Instruction = 0xfb; pub const CREATE2: Instruction = 0xfb;
/// halt execution and register account for later deletion /// halt execution and register account for later deletion
pub const SUICIDE: Instruction = 0xff; pub const SUICIDE: Instruction = 0xff;

View File

@ -223,7 +223,7 @@ impl<Gas: CostType> Gasometer<Gas> {
Request::GasMemProvide(gas, mem, Some(requested)) Request::GasMemProvide(gas, mem, Some(requested))
}, },
instructions::CREATE | instructions::CREATE_P2SH => { instructions::CREATE | instructions::CREATE2 => {
let gas = Gas::from(schedule.create_gas); let gas = Gas::from(schedule.create_gas);
let mem = mem_needed(stack.peek(1), stack.peek(2))?; let mem = mem_needed(stack.peek(1), stack.peek(2))?;

View File

@ -183,7 +183,7 @@ impl<Cost: CostType> Interpreter<Cost> {
let schedule = ext.schedule(); let schedule = ext.schedule();
if (instruction == instructions::DELEGATECALL && !schedule.have_delegate_call) || if (instruction == instructions::DELEGATECALL && !schedule.have_delegate_call) ||
(instruction == instructions::CREATE_P2SH && !schedule.have_create_p2sh) { (instruction == instructions::CREATE2 && !schedule.have_create2) {
return Err(evm::Error::BadInstruction { return Err(evm::Error::BadInstruction {
instruction: instruction instruction: instruction
@ -268,12 +268,12 @@ impl<Cost: CostType> Interpreter<Cost> {
instructions::JUMPDEST => { instructions::JUMPDEST => {
// ignore // ignore
}, },
instructions::CREATE | instructions::CREATE_P2SH => { instructions::CREATE | instructions::CREATE2 => {
let endowment = stack.pop_back(); let endowment = stack.pop_back();
let init_off = stack.pop_back(); let init_off = stack.pop_back();
let init_size = stack.pop_back(); let init_size = stack.pop_back();
let address_scheme = if instruction == instructions::CREATE { ext.schedule().create_address } else { CreateContractAddress::FromSenderAndCodeHash }; let address_scheme = if instruction == instructions::CREATE { CreateContractAddress::FromSenderAndNonce } else { CreateContractAddress::FromSenderAndCodeHash };
let create_gas = provided.expect("`provided` comes through Self::exec from `Gasometer::get_gas_cost_mem`; `gas_gas_mem_cost` guarantees `Some` when instruction is `CALL`/`CALLCODE`/`DELEGATECALL`/`CREATE`; this is `CREATE`; qed"); let create_gas = provided.expect("`provided` comes through Self::exec from `Gasometer::get_gas_cost_mem`; `gas_gas_mem_cost` guarantees `Some` when instruction is `CALL`/`CALLCODE`/`DELEGATECALL`/`CREATE`; this is `CREATE`; qed");
let contract_code = self.mem.read_slice(init_off, init_size); let contract_code = self.mem.read_slice(init_off, init_size);

View File

@ -15,7 +15,6 @@
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
//! Cost schedule and other parameterisations for the EVM. //! Cost schedule and other parameterisations for the EVM.
use evm::CreateContractAddress;
/// Definition of the cost schedule and other parameterisations for the EVM. /// Definition of the cost schedule and other parameterisations for the EVM.
pub struct Schedule { pub struct Schedule {
@ -24,7 +23,7 @@ pub struct Schedule {
/// Does it have a delegate cal /// Does it have a delegate cal
pub have_delegate_call: bool, pub have_delegate_call: bool,
/// Does it have a CREATE_P2SH instruction /// Does it have a CREATE_P2SH instruction
pub have_create_p2sh: bool, pub have_create2: bool,
/// VM stack limit /// VM stack limit
pub stack_limit: usize, pub stack_limit: usize,
/// Max number of nested calls/creates /// Max number of nested calls/creates
@ -102,8 +101,6 @@ pub struct Schedule {
pub no_empty: bool, pub no_empty: bool,
/// Kill empty accounts if touched. /// Kill empty accounts if touched.
pub kill_empty: bool, pub kill_empty: bool,
/// Contract address generation scheme
pub create_address: CreateContractAddress,
} }
impl Schedule { impl Schedule {
@ -118,11 +115,11 @@ impl Schedule {
} }
/// Schedule for the post-EIP-150-era of the Ethereum main net. /// Schedule for the post-EIP-150-era of the Ethereum main net.
pub fn new_post_eip150(max_code_size: usize, fix_exp: bool, no_empty: bool, kill_empty: bool, have_create_p2sh: bool) -> Schedule { pub fn new_post_eip150(max_code_size: usize, fix_exp: bool, no_empty: bool, kill_empty: bool, have_metropolis_instructions: bool) -> Schedule {
Schedule { Schedule {
exceptional_failed_code_deposit: true, exceptional_failed_code_deposit: true,
have_delegate_call: true, have_delegate_call: true,
have_create_p2sh: have_create_p2sh, have_create2: have_metropolis_instructions,
stack_limit: 1024, stack_limit: 1024,
max_depth: 1024, max_depth: 1024,
tier_step_gas: [0, 2, 3, 5, 8, 10, 20, 0], tier_step_gas: [0, 2, 3, 5, 8, 10, 20, 0],
@ -161,7 +158,6 @@ impl Schedule {
sub_gas_cap_divisor: Some(64), sub_gas_cap_divisor: Some(64),
no_empty: no_empty, no_empty: no_empty,
kill_empty: kill_empty, kill_empty: kill_empty,
create_address: if have_create_p2sh { CreateContractAddress::FromCodeHash } else { CreateContractAddress::FromSenderAndNonce },
} }
} }
@ -174,7 +170,7 @@ impl Schedule {
Schedule { Schedule {
exceptional_failed_code_deposit: efcd, exceptional_failed_code_deposit: efcd,
have_delegate_call: hdc, have_delegate_call: hdc,
have_create_p2sh: false, have_create2: false,
stack_limit: 1024, stack_limit: 1024,
max_depth: 1024, max_depth: 1024,
tier_step_gas: [0, 2, 3, 5, 8, 10, 20, 0], tier_step_gas: [0, 2, 3, 5, 8, 10, 20, 0],
@ -213,7 +209,6 @@ impl Schedule {
sub_gas_cap_divisor: None, sub_gas_cap_divisor: None,
no_empty: false, no_empty: false,
kill_empty: false, kill_empty: false,
create_address: CreateContractAddress::FromSenderAndNonce,
} }
} }
} }

View File

@ -185,7 +185,7 @@ impl<'a, B: 'a + StateBackend> Executive<'a, B> {
let (gas_left, output) = match t.action { let (gas_left, output) = match t.action {
Action::Create => { Action::Create => {
let code_hash = t.data.sha3(); let code_hash = t.data.sha3();
let new_address = contract_address(schedule.create_address, &sender, &nonce, &code_hash); let new_address = contract_address(self.engine.create_address_scheme(self.info.number), &sender, &nonce, &code_hash);
let params = ActionParams { let params = ActionParams {
code_address: new_address.clone(), code_address: new_address.clone(),
code_hash: code_hash, code_hash: code_hash,
@ -386,8 +386,8 @@ impl<'a, B: 'a + StateBackend> Executive<'a, B> {
vm_tracer: &mut V, vm_tracer: &mut V,
) -> evm::Result<U256> where T: Tracer, V: VMTracer { ) -> evm::Result<U256> where T: Tracer, V: VMTracer {
let schedule = self.engine.schedule(self.info.number); let scheme = self.engine.create_address_scheme(self.info.number);
if schedule.create_address != CreateContractAddress::FromSenderAndNonce && self.state.exists(&params.address)? { if scheme != CreateContractAddress::FromSenderAndNonce && self.state.exists_and_has_code(&params.address)? {
return Err(evm::Error::OutOfGas); return Err(evm::Error::OutOfGas);
} }
@ -398,6 +398,7 @@ impl<'a, B: 'a + StateBackend> Executive<'a, B> {
let mut unconfirmed_substate = Substate::new(); let mut unconfirmed_substate = Substate::new();
// create contract and transfer value to it if necessary // create contract and transfer value to it if necessary
let schedule = self.engine.schedule(self.info.number);
let nonce_offset = if schedule.no_empty {1} else {0}.into(); let nonce_offset = if schedule.no_empty {1} else {0}.into();
let prev_bal = self.state.balance(&params.address)?; let prev_bal = self.state.balance(&params.address)?;
if let ActionValue::Transfer(val) = params.value { if let ActionValue::Transfer(val) = params.value {

View File

@ -1048,7 +1048,7 @@ impl MinerService for Miner {
Action::Call(_) => None, Action::Call(_) => None,
Action::Create => { Action::Create => {
let sender = tx.sender(); let sender = tx.sender();
Some(contract_address(self.engine.schedule(pending.header().number()).create_address, &sender, &tx.nonce, &tx.data.sha3())) Some(contract_address(self.engine.create_address_scheme(pending.header().number()), &sender, &tx.nonce, &tx.data.sha3()))
} }
}, },
logs: receipt.logs.clone(), logs: receipt.logs.clone(),

View File

@ -238,7 +238,7 @@ pub fn check_proof(
/// Reverting a checkpoint with `revert_to_checkpoint` involves copying /// Reverting a checkpoint with `revert_to_checkpoint` involves copying
/// original values from the latest checkpoint back into `cache`. The code /// original values from the latest checkpoint back into `cache`. The code
/// takes care not to overwrite cached storage while doing that. /// takes care not to overwrite cached storage while doing that.
/// checkpoint can be discateded with `discard_checkpoint`. All of the orignal /// checkpoint can be discarded with `discard_checkpoint`. All of the orignal
/// backed-up values are moved into a parent checkpoint (if any). /// backed-up values are moved into a parent checkpoint (if any).
/// ///
pub struct State<B: Backend> { pub struct State<B: Backend> {
@ -433,6 +433,11 @@ impl<B: Backend> State<B> {
self.ensure_cached(a, RequireCache::None, false, |a| a.map_or(false, |a| !a.is_null())) self.ensure_cached(a, RequireCache::None, false, |a| a.map_or(false, |a| !a.is_null()))
} }
/// Determine whether an account exists and has code.
pub fn exists_and_has_code(&self, a: &Address) -> trie::Result<bool> {
self.ensure_cached(a, RequireCache::CodeSize, false, |a| a.map_or(false, |a| a.code_size().map_or(false, |size| size != 0)))
}
/// Get the balance of account `a`. /// Get the balance of account `a`.
pub fn balance(&self, a: &Address) -> trie::Result<U256> { pub fn balance(&self, a: &Address) -> trie::Result<U256> {
self.ensure_cached(a, RequireCache::None, true, self.ensure_cached(a, RequireCache::None, true,

View File

@ -34,6 +34,9 @@ pub const KEY_LENGTH: usize = 32;
pub const KEY_ITERATIONS: usize = 10240; pub const KEY_ITERATIONS: usize = 10240;
pub const KEY_LENGTH_AES: usize = KEY_LENGTH / 2; pub const KEY_LENGTH_AES: usize = KEY_LENGTH / 2;
/// Default MAC to use (in RPC).
pub const DEFAULT_MAC: [u8; 2] = [0, 0];
#[derive(PartialEq, Debug)] #[derive(PartialEq, Debug)]
pub enum ScryptError { pub enum ScryptError {
// log(N) < r / 16 // log(N) < r / 16

View File

@ -1,6 +1,6 @@
{ {
"name": "parity.js", "name": "parity.js",
"version": "1.7.65", "version": "1.7.69",
"main": "release/index.js", "main": "release/index.js",
"jsnext:main": "src/index.js", "jsnext:main": "src/index.js",
"author": "Parity Team <admin@parity.io>", "author": "Parity Team <admin@parity.io>",
@ -148,7 +148,7 @@
"stylelint": "7.9.0", "stylelint": "7.9.0",
"stylelint-config-standard": "16.0.0", "stylelint-config-standard": "16.0.0",
"to-source": "2.0.3", "to-source": "2.0.3",
"uglify-js": "2.8.16", "uglify-js": "2.8.22",
"url-loader": "0.5.7", "url-loader": "0.5.7",
"webpack": "2.2.1", "webpack": "2.2.1",
"webpack-bundle-size-analyzer": "2.5.0", "webpack-bundle-size-analyzer": "2.5.0",
@ -162,6 +162,7 @@
"@parity/abi": "file:src/abi", "@parity/abi": "file:src/abi",
"@parity/api": "file:src/api", "@parity/api": "file:src/api",
"@parity/jsonrpc": "file:src/jsonrpc", "@parity/jsonrpc": "file:src/jsonrpc",
"@parity/shared": "file:src/shared",
"@parity/ui": "file:src/ui", "@parity/ui": "file:src/ui",
"@parity/wordlist": "1.0.1", "@parity/wordlist": "1.0.1",
"base32.js": "0.1.0", "base32.js": "0.1.0",

View File

@ -99,15 +99,15 @@ export default class Event {
const namedTokens = {}; const namedTokens = {};
topicParams.forEach((param, idx) => { topicParams.forEach((param, idx) => {
namedTokens[param.name] = topicTokens[idx]; namedTokens[param.name || idx] = topicTokens[idx];
}); });
dataParams.forEach((param, idx) => { dataParams.forEach((param, idx) => {
namedTokens[param.name] = dataTokens[idx]; namedTokens[param.name || idx] = dataTokens[idx];
}); });
const inputParamTypes = this.inputParamTypes(); const inputParamTypes = this.inputParamTypes();
const decodedParams = this.inputParamNames() const decodedParams = this.inputParamNames()
.map((name, idx) => new DecodedLogParam(name, inputParamTypes[idx], namedTokens[name])); .map((name, idx) => new DecodedLogParam(name, inputParamTypes[idx], namedTokens[name || idx]));
return new DecodedLog(decodedParams, address); return new DecodedLog(decodedParams, address);
} }

View File

@ -182,10 +182,11 @@ export default class Contract {
log.params = {}; log.params = {};
log.event = event.name; log.event = event.name;
decoded.params.forEach((param) => { decoded.params.forEach((param, index) => {
const { type, value } = param.token; const { type, value } = param.token;
const key = param.name || index;
log.params[param.name] = { type, value }; log.params[key] = { type, value };
}); });
return log; return log;

View File

@ -93,6 +93,16 @@ export function outChainStatus (status) {
} }
export function outDate (date) { export function outDate (date) {
if (typeof date.toISOString === 'function') {
return date;
}
try {
if (typeof date === 'string' && (new Date(date)).toISOString() === date) {
return new Date(date);
}
} catch (error) {}
return new Date(outNumber(date).toNumber() * 1000); return new Date(outNumber(date).toNumber() * 1000);
} }

View File

@ -70,11 +70,21 @@ export default class Parity {
.execute('parity_checkRequest', inNumber16(requestId)); .execute('parity_checkRequest', inNumber16(requestId));
} }
cidV0 (data) {
return this._transport
.execute('parity_cidV0', inData(data));
}
closeVault (vaultName) { closeVault (vaultName) {
return this._transport return this._transport
.execute('parity_closeVault', vaultName); .execute('parity_closeVault', vaultName);
} }
composeTransaction (options) {
return this._transport
.execute('parity_composeTransaction', inOptions(options));
}
consensusCapability () { consensusCapability () {
return this._transport return this._transport
.execute('parity_consensusCapability'); .execute('parity_consensusCapability');

View File

@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import builtinsJson from '~/config/dappsBuiltin.json'; import builtinsJson from '@parity/shared/config/dappsBuiltin.json';
const REGISTER_URLS = { const REGISTER_URLS = {
console: 'https://raw.githubusercontent.com/paritytech/console/3ea0dbfefded359ccdbea37bc4cf350c0aa16948/console.jpeg', console: 'https://raw.githubusercontent.com/paritytech/console/3ea0dbfefded359ccdbea37bc4cf350c0aa16948/console.jpeg',

View File

@ -14,7 +14,8 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import abi from '~/contracts/abi/badgereg'; import abi from '@parity/shared/contracts/abi/badgereg';
import { compiler, source as sourceUrl, output as byteCode } from './code/badgereg'; import { compiler, source as sourceUrl, output as byteCode } from './code/badgereg';
const id = 'badgereg'; const id = 'badgereg';

View File

@ -14,7 +14,8 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import abi from '~/contracts/abi/dappreg'; import abi from '@parity/shared/contracts/abi/dappreg';
import { compiler, source as sourceUrl, output as byteCode } from './code/dappreg'; import { compiler, source as sourceUrl, output as byteCode } from './code/dappreg';
const id = 'dappreg'; // 7bbc4f1a27628781b96213e781a1b8eec6982c1db8fac739af6e4c5a55862c03 const id = 'dappreg'; // 7bbc4f1a27628781b96213e781a1b8eec6982c1db8fac739af6e4c5a55862c03

View File

@ -14,7 +14,8 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import abi from '~/contracts/abi/gavcoin'; import abi from '@parity/shared/contracts/abi/gavcoin';
import { compiler, source as sourceUrl, output as byteCode } from './code/gavcoin'; import { compiler, source as sourceUrl, output as byteCode } from './code/gavcoin';
const isExternal = true; const isExternal = true;

View File

@ -14,7 +14,8 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import abi from '~/contracts/abi/githubhint'; import abi from '@parity/shared/contracts/abi/githubhint';
import { compiler, source as sourceUrl, output as byteCode } from './code/githubhint'; import { compiler, source as sourceUrl, output as byteCode } from './code/githubhint';
const id = 'githubhint'; const id = 'githubhint';

View File

@ -14,7 +14,8 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import abi from '~/contracts/abi/registry2'; import abi from '@parity/shared/contracts/abi/registry2';
import { compiler, source as sourceUrl, output as byteCode } from './code/registry'; import { compiler, source as sourceUrl, output as byteCode } from './code/registry';
const id = 'registry'; const id = 'registry';

View File

@ -14,7 +14,8 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import abi from '~/contracts/abi/signaturereg'; import abi from '@parity/shared/contracts/abi/signaturereg';
import { compiler, source as sourceUrl, output as byteCode } from './code/signaturereg'; import { compiler, source as sourceUrl, output as byteCode } from './code/signaturereg';
const id = 'signaturereg'; const id = 'signaturereg';

View File

@ -14,7 +14,8 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import abi from '~/contracts/abi/basiccoinmanager'; import abi from '@parity/shared/contracts/abi/basiccoinmanager';
import { compiler, source as sourceUrl, output as byteCode } from './code/tokendeploy'; import { compiler, source as sourceUrl, output as byteCode } from './code/tokendeploy';
const id = 'basiccoinmgr'; const id = 'basiccoinmgr';

View File

@ -14,7 +14,8 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import abi from '~/contracts/abi/tokenreg'; import abi from '@parity/shared/contracts/abi/tokenreg';
import { compiler, source as sourceUrl, output as byteCode } from './code/tokenreg'; import { compiler, source as sourceUrl, output as byteCode } from './code/tokenreg';
const id = 'tokenreg'; const id = 'tokenreg';

View File

@ -14,7 +14,8 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import abi from '~/contracts/abi/email-verification'; import abi from '@parity/shared/contracts/abi/email-verification';
import { compiler, source as sourceUrl, output as byteCode } from './code/verifyEmail'; import { compiler, source as sourceUrl, output as byteCode } from './code/verifyEmail';
const isBadge = true; const isBadge = true;

View File

@ -14,7 +14,8 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import abi from '~/contracts/abi/sms-verification'; import abi from '@parity/shared/contracts/abi/sms-verification';
import { compiler, source as sourceUrl, output as byteCode } from './code/verifySms'; import { compiler, source as sourceUrl, output as byteCode } from './code/verifySms';
const isBadge = true; const isBadge = true;

View File

@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import { walletCompiler as compiler, walletLibrary as byteCode, walletLibraryABI as abiJson, walletLibraryRegKey as id, walletSource as sourceUrl } from '~/contracts/code/wallet'; import { walletCompiler as compiler, walletLibrary as byteCode, walletLibraryABI as abiJson, walletLibraryRegKey as id, walletSource as sourceUrl } from '@parity/shared/contracts/code/wallet';
const abi = JSON.parse(abiJson); const abi = JSON.parse(abiJson);
const deployParams = []; const deployParams = [];

View File

@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import builtins from '~/config/dappsBuiltin.json'; import builtins from '@parity/shared/config/dappsBuiltin.json';
const id = 'console'; const id = 'console';
const app = builtins.find((app) => app.url === id); const app = builtins.find((app) => app.url === id);

View File

@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import builtins from '~/config/dappsBuiltin.json'; import builtins from '@parity/shared/config/dappsBuiltin.json';
const id = 'dappreg'; const id = 'dappreg';
const app = builtins.find((app) => app.url === id); const app = builtins.find((app) => app.url === id);

View File

@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import builtins from '~/config/dappsBuiltin.json'; import builtins from '@parity/shared/config/dappsBuiltin.json';
const id = 'githubhint'; const id = 'githubhint';
const app = builtins.find((app) => app.url === id); const app = builtins.find((app) => app.url === id);

View File

@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import builtins from '~/config/dappsBuiltin.json'; import builtins from '@parity/shared/config/dappsBuiltin.json';
const id = 'localtx'; const id = 'localtx';
const app = builtins.find((app) => app.url === id); const app = builtins.find((app) => app.url === id);

View File

@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import builtins from '~/config/dappsBuiltin.json'; import builtins from '@parity/shared/config/dappsBuiltin.json';
const id = 'registry'; const id = 'registry';
const app = builtins.find((app) => app.url === id); const app = builtins.find((app) => app.url === id);

View File

@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import builtins from '~/config/dappsBuiltin.json'; import builtins from '@parity/shared/config/dappsBuiltin.json';
const id = 'signaturereg'; const id = 'signaturereg';
const app = builtins.find((app) => app.url === id); const app = builtins.find((app) => app.url === id);

View File

@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import builtins from '~/config/dappsBuiltin.json'; import builtins from '@parity/shared/config/dappsBuiltin.json';
const id = 'tokendeploy'; const id = 'tokendeploy';
const app = builtins.find((app) => app.url === id); const app = builtins.find((app) => app.url === id);

View File

@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import builtins from '~/config/dappsBuiltin.json'; import builtins from '@parity/shared/config/dappsBuiltin.json';
const id = 'tokenreg'; const id = 'tokenreg';
const app = builtins.find((app) => app.url === id); const app = builtins.find((app) => app.url === id);

View File

@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import builtins from '~/config/dappsBuiltin.json'; import builtins from '@parity/shared/config/dappsBuiltin.json';
const id = 'web'; const id = 'web';
const app = builtins.find((app) => app.url === id); const app = builtins.find((app) => app.url === id);

View File

@ -18,9 +18,9 @@ import BigNumber from 'bignumber.js';
import { action, computed, observable, transaction } from 'mobx'; import { action, computed, observable, transaction } from 'mobx';
import { flatten } from 'lodash'; import { flatten } from 'lodash';
import * as abis from '~/contracts/abi'; import * as abis from '@parity/shared/contracts/abi';
import Contracts from '~/contracts'; import Contracts from '@parity/shared/contracts';
import builtinJson from '~/config/dappsBuiltin.json'; import builtinJson from '@parity/shared/config/dappsBuiltin.json';
import Dapp from './dappStore.js'; import Dapp from './dappStore.js';
import { deleteDapp, registerDapp, updateDapp } from './utils'; import { deleteDapp, registerDapp, updateDapp } from './utils';

View File

@ -14,7 +14,8 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import * as abis from '~/contracts/abi'; import * as abis from '@parity/shared/contracts/abi';
import { api } from './parity'; import { api } from './parity';
let defaultSubscriptionId; let defaultSubscriptionId;

View File

@ -17,7 +17,7 @@
import React from 'react'; import React from 'react';
import { shallow } from 'enzyme'; import { shallow } from 'enzyme';
import '../../../environment/tests'; import '@parity/shared/environment/tests';
import Application from './application'; import Application from './application';

View File

@ -17,8 +17,8 @@
import React from 'react'; import React from 'react';
import { shallow } from 'enzyme'; import { shallow } from 'enzyme';
import '../../../environment/tests'; import EthApi from '@parity/api';
import EthApi from '../../../api'; import '@parity/shared/environment/tests';
// Mock API for tests // Mock API for tests
import * as Api from '../parity'; import * as Api from '../parity';

19
js/src/dapps/package.json Normal file
View File

@ -0,0 +1,19 @@
{
"name": "@parity/dapps",
"description": "Parity dapps",
"version": "0.0.0",
"main": "index.js",
"author": "Parity Team <admin@parity.io>",
"maintainers": [],
"contributors": [],
"license": "GPL-3.0",
"repository": {
"type": "git",
"url": "git+https://github.com/paritytech/parity.git"
},
"keywords": [],
"scripts": {},
"devDependencies": {},
"dependencies": {},
"peerDependencies": {}
}

View File

@ -22,7 +22,8 @@ const muiTheme = getMuiTheme(lightBaseTheme);
import CircularProgress from 'material-ui/CircularProgress'; import CircularProgress from 'material-ui/CircularProgress';
import { Card, CardText } from 'material-ui/Card'; import { Card, CardText } from 'material-ui/Card';
import { nullableProptype } from '~/util/proptypes'; import { nullableProptype } from '@parity/shared/util/proptypes';
import { api } from '../parity'; import { api } from '../parity';
import styles from './application.css'; import styles from './application.css';

View File

@ -18,7 +18,7 @@ import React, { Component, PropTypes } from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { bindActionCreators } from 'redux'; import { bindActionCreators } from 'redux';
import { nullableProptype } from '~/util/proptypes'; import { nullableProptype } from '@parity/shared/util/proptypes';
import Application from './Application'; import Application from './Application';
import * as actions from './actions'; import * as actions from './actions';

View File

@ -25,7 +25,7 @@ import DropDownMenu from 'material-ui/DropDownMenu';
import MenuItem from 'material-ui/MenuItem'; import MenuItem from 'material-ui/MenuItem';
import keycode from 'keycode'; import keycode from 'keycode';
import { nullableProptype } from '~/util/proptypes'; import { nullableProptype } from '@parity/shared/util/proptypes';
import Address from '../ui/address.js'; import Address from '../ui/address.js';
import renderImage from '../ui/image.js'; import renderImage from '../ui/image.js';

View File

@ -24,7 +24,8 @@ import MenuItem from 'material-ui/MenuItem';
import RaisedButton from 'material-ui/RaisedButton'; import RaisedButton from 'material-ui/RaisedButton';
import CheckIcon from 'material-ui/svg-icons/navigation/check'; import CheckIcon from 'material-ui/svg-icons/navigation/check';
import { nullableProptype } from '~/util/proptypes'; import { nullableProptype } from '@parity/shared/util/proptypes';
import { fromWei } from '../parity.js'; import { fromWei } from '../parity.js';
import { clearError, reserve, drop } from './actions'; import { clearError, reserve, drop } from './actions';

View File

@ -24,7 +24,8 @@ import MenuItem from 'material-ui/MenuItem';
import RaisedButton from 'material-ui/RaisedButton'; import RaisedButton from 'material-ui/RaisedButton';
import SaveIcon from 'material-ui/svg-icons/content/save'; import SaveIcon from 'material-ui/svg-icons/content/save';
import { nullableProptype } from '~/util/proptypes'; import { nullableProptype } from '@parity/shared/util/proptypes';
import { clearError, update } from './actions'; import { clearError, update } from './actions';
import styles from './records.css'; import styles from './records.css';

View File

@ -21,7 +21,8 @@ import {
Card, CardHeader, CardText, TextField, DropDownMenu, MenuItem, RaisedButton Card, CardHeader, CardText, TextField, DropDownMenu, MenuItem, RaisedButton
} from 'material-ui'; } from 'material-ui';
import { nullableProptype } from '~/util/proptypes'; import { nullableProptype } from '@parity/shared/util/proptypes';
import { AddIcon, CheckIcon } from '~/ui/Icons'; import { AddIcon, CheckIcon } from '~/ui/Icons';
import { clearError, confirm, propose } from './actions'; import { clearError, confirm, propose } from './actions';
import styles from './reverse.css'; import styles from './reverse.css';

View File

@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import Contracts from '~/contracts'; import Contracts from '@parity/shared/contracts';
import { api } from './parity.js'; import { api } from './parity.js';
import * as addresses from './addresses/actions.js'; import * as addresses from './addresses/actions.js';

View File

@ -17,10 +17,11 @@
import React, { Component, PropTypes } from 'react'; import React, { Component, PropTypes } from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { nullableProptype } from '@parity/shared/util/proptypes';
import Hash from './hash'; import Hash from './hash';
import etherscanUrl from '../util/etherscan-url'; import etherscanUrl from '../util/etherscan-url';
import IdentityIcon from '../IdentityIcon'; import IdentityIcon from '../IdentityIcon';
import { nullableProptype } from '~/util/proptypes';
import styles from './address.css'; import styles from './address.css';

View File

@ -16,7 +16,7 @@
import React from 'react'; import React from 'react';
import { parityNode } from '../../../environment'; import { parityNode } from '@parity/shared/environment';
const styles = { const styles = {
padding: '.5em', padding: '.5em',

View File

@ -14,7 +14,8 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import * as abis from '~/contracts/abi'; import * as abis from '@parity/shared/contracts/abi';
import { api } from './parity'; import { api } from './parity';
const sortEvents = (a, b) => b.blockNumber.cmp(a.blockNumber) || b.logIndex.cmp(a.logIndex); const sortEvents = (a, b) => b.blockNumber.cmp(a.blockNumber) || b.logIndex.cmp(a.logIndex);

View File

@ -17,7 +17,7 @@
import BigNumber from 'bignumber.js'; import BigNumber from 'bignumber.js';
import React, { Component, PropTypes } from 'react'; import React, { Component, PropTypes } from 'react';
import { eip20 } from '~/contracts/abi'; import { eip20 } from '@parity/shared/contracts/abi';
import { api } from '../../parity'; import { api } from '../../parity';
import { loadBalances } from '../../services'; import { loadBalances } from '../../services';

View File

@ -17,7 +17,8 @@
import BigNumber from 'bignumber.js'; import BigNumber from 'bignumber.js';
import { url as etherscanUrl } from '~/3rdparty/etherscan/links'; import { url as etherscanUrl } from '~/3rdparty/etherscan/links';
import * as abis from '~/contracts/abi'; import * as abis from '@parity/shared/contracts/abi';
import { api } from './parity'; import { api } from './parity';
let managerInstance; let managerInstance;

View File

@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import Contracts from '~/contracts'; import Contracts from '@parity/shared/contracts';
import { loadToken, setTokenPending, deleteToken, setTokenData } from '../Tokens/actions'; import { loadToken, setTokenPending, deleteToken, setTokenData } from '../Tokens/actions';
import { api } from '../parity'; import { api } from '../parity';

View File

@ -30,7 +30,7 @@ import styles from './token.css';
import { metaDataKeys } from '../../constants'; import { metaDataKeys } from '../../constants';
import { api } from '../../parity'; import { api } from '../../parity';
import { parityNode } from '../../../../environment'; import { parityNode } from '@parity/shared/environment';
export default class Token extends Component { export default class Token extends Component {
static propTypes = { static propTypes = {

View File

@ -16,7 +16,7 @@
import { api } from './parity'; import { api } from './parity';
import { eip20 as eip20Abi } from '~/contracts/abi'; import { eip20 as eip20Abi } from '@parity/shared/contracts/abi';
export const INVALID_URL_HASH = '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'; export const INVALID_URL_HASH = '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470';
export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'; export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';

View File

@ -296,19 +296,6 @@ export default {
} }
}, },
getBlockHeaderByNumber: {
section: SECTION_NET,
desc: 'Returns block header information by number (same as eth_getBlockByNumber without transactions and uncles)',
params: [
{
type: BlockNumber,
desc: 'integer of a block number, or the string `\'earliest\'`, `\'latest\'` or `\'pending\'`, as in the [default block parameter](#the-default-block-parameter).',
example: fromDecimal(436)
}
],
returns: 'See [eth_getBlockByHash](#eth_getblockbyhash) (without transactions and uncles)'
},
getVaultMeta: { getVaultMeta: {
section: SECTION_VAULT, section: SECTION_VAULT,
desc: 'Returns the metadata for a specific vault', desc: 'Returns the metadata for a specific vault',
@ -1927,5 +1914,87 @@ export default {
desc: 'Message signature.', desc: 'Message signature.',
example: '0x1d9e33a8cf8bfc089a172bca01da462f9e359c6cb1b0f29398bc884e4d18df4f78588aee4fb5cc067ca62d2abab995e0bba29527be6ac98105b0320020a2efaf00' example: '0x1d9e33a8cf8bfc089a172bca01da462f9e359c6cb1b0f29398bc884e4d18df4f78588aee4fb5cc067ca62d2abab995e0bba29527be6ac98105b0320020a2efaf00'
} }
},
composeTransaction: {
desc: 'Given partial transaction request produces transaction with all fields filled in. Such transaction can be then signed externally.',
params: [
{
type: TransactionRequest,
desc: 'see [`eth_sendTransaction`](JSONRPC-eth-module#eth_sendtransaction).',
format: 'inputCallFormatter',
example: {
from: '0xb60e8dd61c5d32be8058bb8eb970870f07233155',
to: '0xd46e8dd67c5d32be8058bb8eb970870f07244567',
value: fromDecimal(2441406250)
}
}
],
returns: {
type: Object,
desc: 'Transaction object (same as the parameter) with missing optional fields filled in by defaults.',
example: {
condition: null,
data: '0x',
from: '0xb60e8dd61c5d32be8058bb8eb970870f07233155',
gas: '0xe57e0',
gasPrice: '0x4a817c800',
nonce: '0x0',
to: '0xd46e8dd67c5d32be8058bb8eb970870f07244567',
value: '0x9184e72a'
}
}
},
getBlockHeaderByNumber: {
desc: 'Get block header. Same as [`eth_getBlockByNumber`](JSONRPC-eth-module#eth_getblockbynumber) but without uncles and transactions.',
params: [
{
type: BlockNumber,
desc: 'integer of a block number, or the string `\'earliest\'`, `\'latest\'` or `\'pending\'`, as in the [default block parameter](#the-default-block-parameter).',
example: fromDecimal(436)
}
],
returns: {
type: Object,
desc: 'Block header',
example: {
author: '0xbb7b8287f3f0a933474a79eae42cbca977791171',
difficulty: '0x4ea3f27bc',
extraData: '0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32',
gasLimit: '0x1388',
gasUsed: '0x0',
hash: '0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae',
logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
miner: '0xbb7b8287f3f0a933474a79eae42cbca977791171',
mixHash: '0x4fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843',
nonce: '0x689056015818adbe',
number: '0x1b4',
parentHash: '0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54',
receiptsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
sealFields: ['0xa04fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843', '0x88689056015818adbe'],
sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347',
size: '0x21b',
stateRoot: '0xddc8b0234c2e0cad087c8b389aa7ef01f7d79b2570bccb77ce48648aa61c904d',
timestamp: '0x55ba467c',
transactionsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
}
}
},
cidV0: {
desc: 'Compute a v0 IPFS Content ID from protobuf encoded bytes.',
params: [
{
type: Data,
desc: 'to encode.',
example: '0x666f6f626172'
}
],
returns: {
type: String,
desc: 'Base58 encoded CID',
example: 'QmSbFjqjd6nFwNHqsBCC7SK8GShGcayLUEtysJjNGhZAnC'
}
} }
}; };

View File

@ -18,7 +18,7 @@ import { uniq } from 'lodash';
import store from 'store'; import store from 'store';
import Api from '@parity/api'; import Api from '@parity/api';
import { LOG_KEYS, getLogger } from '~/config'; import { LOG_KEYS, getLogger } from '@parity/shared/config';
const log = getLogger(LOG_KEYS.Signer); const log = getLogger(LOG_KEYS.Signer);

View File

@ -16,13 +16,11 @@
import toolbox from 'sw-toolbox'; import toolbox from 'sw-toolbox';
toolbox.precache(self.serviceWorkerOption.assets);
/** /**
* Cache the SOLC files : if not available, make a network request * Cache the SOLC files : if not available, make a network request
*/ */
toolbox.router.any(/raw.githubusercontent.com\/ethereum\/solc-bin(.+)list\.json$/, toolbox.cacheFirst); toolbox.router.any(/rawgit.com\/ethereum\/solc-bin(.+)list\.json$/, toolbox.networkFirst);
toolbox.router.any(/raw.githubusercontent.com\/ethereum\/solc-bin(.+)soljson(.+)\.js$/, toolbox.cacheFirst); toolbox.router.any(/rawgit.com\/ethereum\/solc-bin(.+)soljson(.+)\.js$/, toolbox.cacheFirst);
self.addEventListener('install', (event) => { self.addEventListener('install', (event) => {
event.waitUntil(self.skipWaiting()); event.waitUntil(self.skipWaiting());

Some files were not shown because too many files have changed in this diff Show More