IoTeX client
contract.h
1#ifndef IOTEX_CONTRACT_H
2#define IOTEX_CONTRACT_H
3
4#include "abi/abi.h"
5#include <map>
6#include <stddef.h>
7#include <stdint.h>
8#include <vector>
9
10namespace iotex
11{
12
14{
15 public:
16 void AddParameter(const IotexString& name, iotex::abi::ParameterValue value);
17 bool ContainsParameter(const IotexString& name);
18 iotex::abi::ParameterValue GetParameter(const IotexString& name);
19
20 private:
21 std::map<const IotexString, iotex::abi::ParameterValue> _dictionary;
22};
23
25{
26 public:
32 Contract(IotexString& abiJson);
33
39 Contract(std::vector<iotex::abi::FunctionAbi>& functions);
40
49 ResultCode generateCallData(const IotexString& functionName, ParameterValuesDictionary& params,
50 IotexString& out);
51
52 static int32_t generateBytesForUint(const uint8_t* pVal, size_t size, uint8_t* out);
53 static int32_t generateBytesForInt(const int8_t* pVal, size_t size, uint8_t* out);
54 static int32_t generateBytesForAddress(const uint8_t* pVal, uint8_t* out);
55 static int32_t generateBytesForBool(bool val, uint8_t* out);
56 static int32_t generateBytesForStaticBytes(uint8_t* pVal, size_t size, uint8_t* out);
57 static int32_t generateBytesForBytes(uint8_t* pVal, size_t size, uint8_t* out);
58 static int32_t generateBytesForString(char* pVal, size_t size, uint8_t* out);
59 static int32_t generateBytesForStaticArrayOfStaticElements(iotex::abi::ParameterValue param,
60 std::vector<uint8_t>& data);
61 static int32_t generateBytesForDynamicArrayOfStaticElements(iotex::abi::ParameterValue param,
62 std::vector<uint8_t>& data);
63 static int32_t generateBytesForStaticArrayOfDynamicElements(iotex::abi::ParameterValue param,
64 std::vector<uint8_t>& data);
65 static void generateFunctionSelector(iotex::abi::FunctionAbi& function,
66 std::vector<uint8_t>& out);
67
68 // Not supported:
69 // Nested arrays
70 // Tuple
71 // Fixed
72
73 private:
74 std::vector<iotex::abi::FunctionAbi> _functions;
75
76 static int32_t generateBytesForParameter(iotex::abi::ParameterValue param,
77 iotex::abi::EthereumTypeName type,
78 std::vector<uint8_t>& data);
79 static int32_t generateBytesForSimpleType(iotex::abi::ParameterValue param,
80 iotex::abi::EthereumTypeName type, uint8_t buf[32]);
81};
82} // namespace iotex
83
84#endif
Definition: contract.h:25
ResultCode generateCallData(const IotexString &functionName, ParameterValuesDictionary &params, IotexString &out)
Generates the Ethereum encoded data for the contract call.
Definition: contract.cpp:42
Contract(IotexString &abiJson)
Construct a new contract object passing the ABI JSON string.
Definition: contract.cpp:32
Definition: contract.h:14
A class that represents the ABI for a contract function.
Definition: abi.h:120
Class that represents the value of a contract function input or output parameter.
Definition: abi.h:172
Definition: abi.h:12