1) org.ethereum.core.TransactionExecutor#create
AccountState existingAddr = cacheTrack.getAccountState(newContractAddress);
if (existingAddr != null && existingAddr.isContractExist(blockchainConfig)) {
execError("Trying to create a contract with existing contract address: 0x" + toHexString(newContractAddress));
m_endGas = BigInteger.ZERO;
return;
}
existingAddr will not exists, because the nonce of the sender has been checked in org.ethereum.core.TransactionExecutor#init
2) org.ethereum.core.TransactionExecutor#create
//In case of hashing collisions (for TCK tests only), check for any balance before createAccount()
BigInteger oldBalance = track.getBalance(newContractAddress);
cacheTrack.createAccount(tx.getContractAddress());
cacheTrack.addBalance(newContractAddress, oldBalance);
It is rude to transfer balance of same-address contract to the new contract ?
1) org.ethereum.core.TransactionExecutor#create AccountState existingAddr = cacheTrack.getAccountState(newContractAddress); if (existingAddr != null && existingAddr.isContractExist(blockchainConfig)) { execError("Trying to create a contract with existing contract address: 0x" + toHexString(newContractAddress)); m_endGas = BigInteger.ZERO; return; }
existingAddr will not exists, because the nonce of the sender has been checked in org.ethereum.core.TransactionExecutor#init
2) org.ethereum.core.TransactionExecutor#create //In case of hashing collisions (for TCK tests only), check for any balance before createAccount() BigInteger oldBalance = track.getBalance(newContractAddress); cacheTrack.createAccount(tx.getContractAddress()); cacheTrack.addBalance(newContractAddress, oldBalance);
It is rude to transfer balance of same-address contract to the new contract ?