Skip to content

Commit

Permalink
bugfix for the to_buffer
Browse files Browse the repository at this point in the history
  • Loading branch information
izelnakri committed Sep 8, 2017
1 parent d1e4d73 commit b999371
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 22 deletions.
45 changes: 24 additions & 21 deletions lib/eth/transaction.ex
Original file line number Diff line number Diff line change
Expand Up @@ -25,45 +25,48 @@ defmodule ETH.Transaction do
end

# TODO: what if its a wallet
def set(params = %{from: from, to: to, value: value}) do
def set(params) when is_list(params) do
gas_price = Keyword.get(params, :gas_price, ETH.Query.gas_price())
data = Keyword.get(params, :data, "")
nonce = Keyword.get(params, :nonce, ETH.Query.get_transaction_count(from))
nonce = Keyword.get(params, :nonce, ETH.Query.get_transaction_count(params[:from]))
chain_id = Keyword.get(params, :chain_id, 3)
gas_limit = Keyword.get(params, :gas_limit, ETH.Query.estimate_gas(%{
to: to, value: value, data: data, nonce: nonce, chain_id: chain_id
to: params[:to], value: params[:value], data: data, nonce: nonce, chain_id: chain_id
}))
# gas_limit = 100000000

%{nonce: nonce, gas_price: gas_price, gas_limit: gas_limit, to: to, value: value, data: data}
%{
nonce: nonce, gas_price: gas_price, gas_limit: gas_limit, to: params[:to],
value: params[:value], data: params[:data]
}
|> parse
end
def set(params = [from: from, to: to, value: value]) do
gas_price = Keyword.get(params, :gas_price, ETH.Query.gas_price())
data = Keyword.get(params, :data, "")
nonce = Keyword.get(params, :nonce, ETH.Query.get_transaction_count(from))
chain_id = Keyword.get(params, :chain_id, 3)
gas_limit = Keyword.get(params, :gas_limit, ETH.Query.estimate_gas(%{
to: to, value: value, data: data, nonce: nonce, chain_id: chain_id
def set(params) do
gas_price = Map.get(params, :gas_price, ETH.Query.gas_price())
data = Map.get(params, :data, "")
nonce = Map.get(params, :nonce, ETH.Query.get_transaction_count(params.from))
chain_id = Map.get(params, :chain_id, 3)
gas_limit = Map.get(params, :gas_limit, ETH.Query.estimate_gas(%{
to: params.to, value: params.value, data: data, nonce: nonce, chain_id: chain_id
}))
# gas_limit = 100000000

%{nonce: nonce, gas_price: gas_price, gas_limit: gas_limit, to: to, value: value, data: data}
%{nonce: nonce, gas_price: gas_price, gas_limit: gas_limit, to: params.to, value: params.value, data: data}
|> parse
end

# TODO: what if its a wallet
def send_transaction(params = %{from: _from, to: _to, value: _value}, private_key) do
def send_transaction(params, private_key) when is_list(params) do
params
|> set
|> to_list
|> sign_transaction_list(private_key)
|> send
|> sign_transaction(private_key)
# |> send
end
def send_transaction(params = [from: _from, to: _to, value: _value], private_key) do
# TODO: what if its a wallet
def send_transaction(params, private_key) do
params
|> set
|> to_list
|> sign_transaction_list(private_key)
|> send
|> sign_transaction(private_key)
# |> send
end

def send(signature), do: Ethereumex.HttpClient.eth_send_raw_transaction([signature])
Expand Down
8 changes: 7 additions & 1 deletion lib/eth/utils.ex
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,13 @@ defmodule ETH.Utils do
def decode16(value), do: Base.decode16!(value, case: :mixed)

def to_buffer(nil), do: ""
def to_buffer(data) when is_number(data), do: pad_to_even(Integer.to_string(data, 16))
def to_buffer(0), do: ""
def to_buffer(data) when is_number(data) do
data
|> Integer.to_string(16)
|> pad_to_even
|> Base.decode16!(case: :mixed)
end
def to_buffer("0x00"), do: ""
def to_buffer("0x" <> data) do
padded_data = pad_to_even(data)
Expand Down
12 changes: 12 additions & 0 deletions test/eth/transaction_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,18 @@ defmodule ETH.TransactionTest do
end)
end



test "send_transaction_works" do
output = ETH.Transaction.send_transaction(%{
nonce: 1, to: "0x0dcd857b3c5db88cb7c025f0ef229331cfadffe5", value: 22, gas_limit: 100000,
gas_price: 1000, from: "0x42c343d8b77a9106d7112b71ba6b3030a34ba560"
}, "75c3b11e480f8ba3db792424bebda1fc8dea2b254287e3a9af9ed50c7d255720") |> Base.encode16(case: :lower)

serialized_hash = "f862018203e8830186a0940dcd857b3c5db88cb7c025f0ef229331cfadffe516801ba09b35467cf48151683b41ed8425d59317716f4f639126d7eb69167ac95c8c3ba3a00d5d21f4c6fc400202dadc09a192b011cc16aefa6155d4e5df15d77d9f6c8f9f"
assert output == serialized_hash
end

# NOTE: probably not needed changes th API
# test "can sign an empty transaction with right chain id" do
# ETH.Transaction.hash_transaction(%{chain_id: 42 })
Expand Down

0 comments on commit b999371

Please # to comment.