mirror of https://github.com/hyperledger/besu
fix: private contracts not able to call public contracts that call other public contracts (#2816)
Private accounts are not able to change the state of public accounts. When transferValue is called in MessageCallProcessor it attempts to get a mutable account. This is only required when a transfer of value is happening. If a transfer of value from a private contract to a public contract is attempted an error will be thrown. Signed-off-by: Antony Denyer <git@antonydenyer.co.uk>pull/2823/head
parent
9111faccc2
commit
bb11e211db
@ -0,0 +1,37 @@ |
||||
/* |
||||
* Copyright contributors to Hyperledger Besu |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on |
||||
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the |
||||
* specific language governing permissions and limitations under the License. |
||||
* |
||||
* SPDX-License-Identifier: Apache-2.0 |
||||
*/ |
||||
pragma solidity >=0.4.0 <0.6.0; |
||||
|
||||
import "./SimpleStorage.sol"; |
||||
|
||||
// compile with: |
||||
// solc RemoteSimpleStorage.sol --bin --abi --optimize --overwrite -o . |
||||
// then create web3j wrappers with: |
||||
// web3j solidity generate -b ./generated/RemoteSimpleStorage.bin -a ./generated/RemoteSimpleStorage.abi -o ../../../../../ -p org.hyperledger.besu.tests.web3j.generated |
||||
contract RemoteSimpleStorage { |
||||
SimpleStorage public simpleStorage; |
||||
|
||||
function setRemote(SimpleStorage _simpleStorage) public { |
||||
simpleStorage = _simpleStorage; |
||||
} |
||||
|
||||
function set(uint value) public { |
||||
simpleStorage.set(value); |
||||
} |
||||
|
||||
function get() public view returns (uint) { |
||||
return simpleStorage.get(); |
||||
} |
||||
} |
@ -0,0 +1,196 @@ |
||||
/* |
||||
* Copyright contributors to Hyperledger Besu |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on |
||||
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the |
||||
* specific language governing permissions and limitations under the License. |
||||
* |
||||
* SPDX-License-Identifier: Apache-2.0 |
||||
*/ |
||||
|
||||
package org.hyperledger.besu.tests.web3j.generated; |
||||
|
||||
import java.math.BigInteger; |
||||
import java.util.Arrays; |
||||
import java.util.Collections; |
||||
|
||||
import org.web3j.abi.TypeReference; |
||||
import org.web3j.abi.datatypes.Address; |
||||
import org.web3j.abi.datatypes.Function; |
||||
import org.web3j.abi.datatypes.Type; |
||||
import org.web3j.abi.datatypes.generated.Uint256; |
||||
import org.web3j.crypto.Credentials; |
||||
import org.web3j.protocol.Web3j; |
||||
import org.web3j.protocol.core.RemoteCall; |
||||
import org.web3j.protocol.core.RemoteFunctionCall; |
||||
import org.web3j.protocol.core.methods.response.TransactionReceipt; |
||||
import org.web3j.tx.Contract; |
||||
import org.web3j.tx.TransactionManager; |
||||
import org.web3j.tx.gas.ContractGasProvider; |
||||
|
||||
/** |
||||
* Auto generated code. |
||||
* |
||||
* <p><strong>Do not modify!</strong> |
||||
* |
||||
* <p>Please use the <a href="https://docs.web3j.io/command_line.html">web3j command line tools</a>, |
||||
* or the org.web3j.codegen.SolidityFunctionWrapperGenerator in the <a |
||||
* href="https://github.com/web3j/web3j/tree/master/codegen">codegen module</a> to update. |
||||
* |
||||
* <p>Generated with web3j version 4.5.0. |
||||
*/ |
||||
@SuppressWarnings("rawtypes") |
||||
public class RemoteSimpleStorage extends Contract { |
||||
private static final String BINARY = |
||||
"608060405234801561001057600080fd5b5061034c806100206000396000f3fe608060405234801561001057600080fd5b5060043610610069576000357c01000000000000000000000000000000000000000000000000000000009004806360fe47b11461006e5780636be0d6bf1461009c5780636d4ce63c146100e6578063f1efe24c14610104575b600080fd5b61009a6004803603602081101561008457600080fd5b8101908080359060200190929190505050610148565b005b6100a46101f3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100ee610218565b6040518082815260200191505060405180910390f35b6101466004803603602081101561011a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506102dd565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166360fe47b1826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b1580156101d857600080fd5b505af11580156101ec573d6000803e3d6000fd5b5050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4ce63c6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561029d57600080fd5b505afa1580156102b1573d6000803e3d6000fd5b505050506040513d60208110156102c757600080fd5b8101908080519060200190929190505050905090565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505056fea165627a7a723058209de47b3e814c56fb80861a580d360af8738753c53cc6e71163f687ed3eed570f0029"; |
||||
|
||||
public static final String FUNC_SET = "set"; |
||||
|
||||
public static final String FUNC_SIMPLESTORAGE = "simpleStorage"; |
||||
|
||||
public static final String FUNC_GET = "get"; |
||||
|
||||
public static final String FUNC_SETREMOTE = "setRemote"; |
||||
|
||||
@Deprecated |
||||
protected RemoteSimpleStorage( |
||||
String contractAddress, |
||||
Web3j web3j, |
||||
Credentials credentials, |
||||
BigInteger gasPrice, |
||||
BigInteger gasLimit) { |
||||
super(BINARY, contractAddress, web3j, credentials, gasPrice, gasLimit); |
||||
} |
||||
|
||||
protected RemoteSimpleStorage( |
||||
String contractAddress, |
||||
Web3j web3j, |
||||
Credentials credentials, |
||||
ContractGasProvider contractGasProvider) { |
||||
super(BINARY, contractAddress, web3j, credentials, contractGasProvider); |
||||
} |
||||
|
||||
@Deprecated |
||||
protected RemoteSimpleStorage( |
||||
String contractAddress, |
||||
Web3j web3j, |
||||
TransactionManager transactionManager, |
||||
BigInteger gasPrice, |
||||
BigInteger gasLimit) { |
||||
super(BINARY, contractAddress, web3j, transactionManager, gasPrice, gasLimit); |
||||
} |
||||
|
||||
protected RemoteSimpleStorage( |
||||
String contractAddress, |
||||
Web3j web3j, |
||||
TransactionManager transactionManager, |
||||
ContractGasProvider contractGasProvider) { |
||||
super(BINARY, contractAddress, web3j, transactionManager, contractGasProvider); |
||||
} |
||||
|
||||
public RemoteFunctionCall<TransactionReceipt> set(BigInteger value) { |
||||
final Function function = |
||||
new Function( |
||||
FUNC_SET, |
||||
Arrays.<Type>asList(new org.web3j.abi.datatypes.generated.Uint256(value)), |
||||
Collections.<TypeReference<?>>emptyList()); |
||||
return executeRemoteCallTransaction(function); |
||||
} |
||||
|
||||
public RemoteFunctionCall<String> simpleStorage() { |
||||
final Function function = |
||||
new Function( |
||||
FUNC_SIMPLESTORAGE, |
||||
Arrays.<Type>asList(), |
||||
Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {})); |
||||
return executeRemoteCallSingleValueReturn(function, String.class); |
||||
} |
||||
|
||||
public RemoteFunctionCall<BigInteger> get() { |
||||
final Function function = |
||||
new Function( |
||||
FUNC_GET, |
||||
Arrays.<Type>asList(), |
||||
Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {})); |
||||
return executeRemoteCallSingleValueReturn(function, BigInteger.class); |
||||
} |
||||
|
||||
public RemoteFunctionCall<TransactionReceipt> setRemote(String _simpleStorage) { |
||||
final Function function = |
||||
new Function( |
||||
FUNC_SETREMOTE, |
||||
Arrays.<Type>asList(new org.web3j.abi.datatypes.Address(160, _simpleStorage)), |
||||
Collections.<TypeReference<?>>emptyList()); |
||||
return executeRemoteCallTransaction(function); |
||||
} |
||||
|
||||
@Deprecated |
||||
public static RemoteSimpleStorage load( |
||||
String contractAddress, |
||||
Web3j web3j, |
||||
Credentials credentials, |
||||
BigInteger gasPrice, |
||||
BigInteger gasLimit) { |
||||
return new RemoteSimpleStorage(contractAddress, web3j, credentials, gasPrice, gasLimit); |
||||
} |
||||
|
||||
@Deprecated |
||||
public static RemoteSimpleStorage load( |
||||
String contractAddress, |
||||
Web3j web3j, |
||||
TransactionManager transactionManager, |
||||
BigInteger gasPrice, |
||||
BigInteger gasLimit) { |
||||
return new RemoteSimpleStorage(contractAddress, web3j, transactionManager, gasPrice, gasLimit); |
||||
} |
||||
|
||||
public static RemoteSimpleStorage load( |
||||
String contractAddress, |
||||
Web3j web3j, |
||||
Credentials credentials, |
||||
ContractGasProvider contractGasProvider) { |
||||
return new RemoteSimpleStorage(contractAddress, web3j, credentials, contractGasProvider); |
||||
} |
||||
|
||||
public static RemoteSimpleStorage load( |
||||
String contractAddress, |
||||
Web3j web3j, |
||||
TransactionManager transactionManager, |
||||
ContractGasProvider contractGasProvider) { |
||||
return new RemoteSimpleStorage(contractAddress, web3j, transactionManager, contractGasProvider); |
||||
} |
||||
|
||||
public static RemoteCall<RemoteSimpleStorage> deploy( |
||||
Web3j web3j, Credentials credentials, ContractGasProvider contractGasProvider) { |
||||
return deployRemoteCall( |
||||
RemoteSimpleStorage.class, web3j, credentials, contractGasProvider, BINARY, ""); |
||||
} |
||||
|
||||
@Deprecated |
||||
public static RemoteCall<RemoteSimpleStorage> deploy( |
||||
Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) { |
||||
return deployRemoteCall( |
||||
RemoteSimpleStorage.class, web3j, credentials, gasPrice, gasLimit, BINARY, ""); |
||||
} |
||||
|
||||
public static RemoteCall<RemoteSimpleStorage> deploy( |
||||
Web3j web3j, TransactionManager transactionManager, ContractGasProvider contractGasProvider) { |
||||
return deployRemoteCall( |
||||
RemoteSimpleStorage.class, web3j, transactionManager, contractGasProvider, BINARY, ""); |
||||
} |
||||
|
||||
@Deprecated |
||||
public static RemoteCall<RemoteSimpleStorage> deploy( |
||||
Web3j web3j, |
||||
TransactionManager transactionManager, |
||||
BigInteger gasPrice, |
||||
BigInteger gasLimit) { |
||||
return deployRemoteCall( |
||||
RemoteSimpleStorage.class, web3j, transactionManager, gasPrice, gasLimit, BINARY, ""); |
||||
} |
||||
} |
Loading…
Reference in new issue