Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Soroban.RPC.Server and network_passphrase configuration #150

Merged
280 changes: 227 additions & 53 deletions README.md

Large diffs are not rendered by default.

3 changes: 0 additions & 3 deletions config/config.exs

This file was deleted.

3 changes: 0 additions & 3 deletions config/dev.exs

This file was deleted.

1 change: 0 additions & 1 deletion config/prod.exs

This file was deleted.

1 change: 0 additions & 1 deletion config/test.exs

This file was deleted.

74 changes: 60 additions & 14 deletions lib/contract.ex
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,21 @@ defmodule Soroban.Contract do
}

defdelegate invoke(
server,
network_passphrase,
contract_address,
source_secret_key,
function_name,
function_args \\ [],
extra_fee_rate \\ 0.0,
auth_secret_keys \\ [],
addl_resources \\ []
),
to: InvokeContractFunction,
as: :invoke

defdelegate simulate_invoke(
server,
network_passphrase,
contract_address,
source_public_key,
function_name,
Expand All @@ -35,6 +38,8 @@ defmodule Soroban.Contract do
as: :simulate_invoke

defdelegate upload(
server,
network_passphrase,
wasm,
source_secret_key,
addl_resources \\ []
Expand All @@ -43,6 +48,8 @@ defmodule Soroban.Contract do
as: :upload

defdelegate deploy(
server,
network_passphrase,
wasm_id,
source_secret_key,
addl_resources \\ []
Expand All @@ -51,6 +58,8 @@ defmodule Soroban.Contract do
as: :deploy

defdelegate deploy_asset(
server,
network_passphrase,
asset_code,
asset_issuer,
source_secret_key,
Expand All @@ -60,6 +69,8 @@ defmodule Soroban.Contract do
as: :deploy

defdelegate extend_contract(
server,
network_passphrase,
contract_address,
secret_key,
ledgers_to_extend,
Expand All @@ -68,11 +79,20 @@ defmodule Soroban.Contract do
to: ExtendFootprintTTL,
as: :extend_contract

defdelegate extend_contract_wasm(wasm_id, secret_key, ledgers_to_extend, addl_resources \\ []),
to: ExtendFootprintTTL,
as: :extend_contract_wasm
defdelegate extend_contract_wasm(
server,
network_passphrase,
wasm_id,
secret_key,
ledgers_to_extend,
addl_resources \\ []
),
to: ExtendFootprintTTL,
as: :extend_contract_wasm

defdelegate extend_contract_keys(
server,
network_passphrase,
contract_address,
secret_key,
ledgers_to_extend,
Expand All @@ -82,30 +102,52 @@ defmodule Soroban.Contract do
to: ExtendFootprintTTL,
as: :extend_contract_keys

defdelegate restore_contract(contract_address, secret_key, addl_resources \\ []),
to: RestoreFootprint,
as: :restore_contract
defdelegate restore_contract(
server,
network_passphrase,
contract_address,
secret_key,
addl_resources \\ []
),
to: RestoreFootprint,
as: :restore_contract

defdelegate restore_contract_wasm(wasm_id, secret_key, addl_resources \\ []),
to: RestoreFootprint,
as: :restore_contract_wasm
defdelegate restore_contract_wasm(
server,
network_passphrase,
wasm_id,
secret_key,
addl_resources \\ []
),
to: RestoreFootprint,
as: :restore_contract_wasm

defdelegate restore_contract_keys(contract_address, secret_key, keys, addl_resources \\ []),
to: RestoreFootprint,
as: :restore_contract_keys
defdelegate restore_contract_keys(
server,
network_passphrase,
contract_address,
secret_key,
keys,
addl_resources \\ []
),
to: RestoreFootprint,
as: :restore_contract_keys

defdelegate retrieve_unsigned_xdr_to_invoke(
server,
network_passphrase,
contract_address,
source_public_key,
function_name,
function_args \\ [],
extra_fee_rate \\ 0.0,
addl_resources \\ []
),
to: InvokeContractFunction,
as: :retrieve_unsigned_xdr_to_invoke

defdelegate retrieve_unsigned_xdr_to_upload(
server,
network_passphrase,
wasm,
source_public_key,
addl_resources \\ []
Expand All @@ -114,6 +156,8 @@ defmodule Soroban.Contract do
as: :retrieve_unsigned_xdr_to_upload

defdelegate retrieve_unsigned_xdr_to_deploy(
server,
network_passphrase,
wasm_id,
source_public_key,
addl_resources \\ []
Expand All @@ -122,6 +166,8 @@ defmodule Soroban.Contract do
as: :retrieve_unsigned_xdr_to_deploy

defdelegate retrieve_unsigned_xdr_to_deploy_asset(
server,
network_passphrase,
asset_code,
source_public_key,
addl_resources \\ []
Expand Down
58 changes: 49 additions & 9 deletions lib/contract/deploy_asset_contract.ex
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ defmodule Soroban.Contract.DeployAssetContract do
@moduledoc """
`DeployAssetContract` implementation to deploy contract from an Asset.
"""
alias Soroban.RPC.SendTransactionResponse
alias Stellar.Horizon.Accounts

alias Soroban.RPC
alias Soroban.RPC.{SendTransactionResponse, Server}

alias Stellar.TxBuild.{
Account,
Expand All @@ -19,6 +20,8 @@ defmodule Soroban.Contract.DeployAssetContract do

alias Soroban.Contract.RPCCalls

@type server :: Server.t()
@type network_passphrase :: String.t()
@type asset :: Asset.t()
@type asset_code :: binary()
@type envelope_xdr :: String.t()
Expand All @@ -29,22 +32,39 @@ defmodule Soroban.Contract.DeployAssetContract do
@type addl_resources :: keyword()

@spec deploy(
server :: server(),
network_passphrase :: network_passphrase(),
asset_code :: asset_code(),
asset_issuer :: asset_issuer(),
secret_key :: secret_key(),
addl_resources :: addl_resources()
) :: send_response()
def deploy(asset_code, asset_issuer, secret_key, addl_resources \\ []) do
def deploy(
%Server{} = server,
network_passphrase,
asset_code,
asset_issuer,
secret_key,
addl_resources \\ []
) do
with {public_key, _secret} = keypair <- Stellar.KeyPair.from_secret_seed(secret_key),
{:ok, seq_num} <- Accounts.fetch_next_sequence_number(public_key),
{:ok, seq_num} <- RPC.fetch_next_sequence_number(server, public_key),
%Account{} = source_account <- Account.new(public_key),
%SequenceNumber{} = sequence_number <- SequenceNumber.new(seq_num),
%Signature{} = signature <- Signature.new(keypair),
%Asset{} = asset <- Asset.new(code: asset_code, issuer: asset_issuer),
%InvokeHostFunction{} = invoke_host_function_op <- create_host_function_deploy_op(asset) do
invoke_host_function_op
|> RPCCalls.simulate(source_account, sequence_number, addl_resources)
|> RPCCalls.simulate(
server,
network_passphrase,
source_account,
sequence_number,
addl_resources
)
|> RPCCalls.send_transaction(
server,
network_passphrase,
source_account,
sequence_number,
signature,
Expand All @@ -54,20 +74,40 @@ defmodule Soroban.Contract.DeployAssetContract do
end

@spec retrieve_unsigned_xdr_to_deploy_asset(
server :: server(),
network_passphrase :: network_passphrase(),
asset_code :: asset_code(),
source_public_key :: binary(),
addl_resources :: addl_resources()
) :: envelope_xdr()
def retrieve_unsigned_xdr_to_deploy_asset(asset_code, source_public_key, addl_resources \\ []) do
with {:ok, seq_num} <- Accounts.fetch_next_sequence_number(source_public_key),
def retrieve_unsigned_xdr_to_deploy_asset(
%Server{} = server,
network_passphrase,
asset_code,
source_public_key,
addl_resources \\ []
) do
with {:ok, seq_num} <- RPC.fetch_next_sequence_number(server, source_public_key),
%Account{} = source_account <- Account.new(source_public_key),
%SequenceNumber{} = sequence_number <- SequenceNumber.new(seq_num),
%Asset{} = asset <- Asset.new(code: asset_code, issuer: source_public_key),
%InvokeHostFunction{} = invoke_host_function_op <-
create_host_function_deploy_op(asset) do
invoke_host_function_op
|> RPCCalls.simulate(source_account, sequence_number, addl_resources)
|> RPCCalls.retrieve_unsigned_xdr(source_account, sequence_number, invoke_host_function_op)
|> RPCCalls.simulate(
server,
network_passphrase,
source_account,
sequence_number,
addl_resources
)
|> RPCCalls.retrieve_unsigned_xdr(
server,
network_passphrase,
source_account,
sequence_number,
invoke_host_function_op
)
end
end

Expand Down
57 changes: 47 additions & 10 deletions lib/contract/deploy_contract.ex
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ defmodule Soroban.Contract.DeployContract do
@moduledoc """
`DeployContract` implementation to deploy contract from a wasm file.
"""
alias Soroban.RPC.SendTransactionResponse
alias Stellar.Horizon.Accounts

alias Soroban.RPC
alias Soroban.RPC.{SendTransactionResponse, Server}

alias Stellar.TxBuild.{
Account,
Expand All @@ -20,26 +21,42 @@ defmodule Soroban.Contract.DeployContract do

alias Soroban.Contract.RPCCalls

@type server :: Server.t()
@type network_passphrase :: String.t()
@type envelope_xdr :: String.t()
@type public_key :: String.t()
@type wasm_id :: binary()
@type invoke_host_function :: InvokeHostFunction.t()
@type send_response :: {:ok, SendTransactionResponse.t()}
@type addl_resources :: keyword()

@spec deploy(wasm_id :: wasm_id(), secret_key :: binary(), addl_resources :: addl_resources()) ::
@spec deploy(
server :: server(),
network_passphrase :: network_passphrase(),
wasm_id :: wasm_id(),
secret_key :: binary(),
addl_resources :: addl_resources()
) ::
send_response()
def deploy(wasm_id, secret_key, addl_resources \\ []) do
def deploy(%Server{} = server, network_passphrase, wasm_id, secret_key, addl_resources \\ []) do
with {public_key, _secret} = keypair <- Stellar.KeyPair.from_secret_seed(secret_key),
%Account{} = source_account <- Account.new(public_key),
{:ok, seq_num} <- Accounts.fetch_next_sequence_number(public_key),
{:ok, seq_num} <- RPC.fetch_next_sequence_number(server, public_key),
%SequenceNumber{} = sequence_number <- SequenceNumber.new(seq_num),
%Signature{} = signature <- Signature.new(keypair),
%InvokeHostFunction{} = invoke_host_function_op <-
create_host_function_deploy_op(wasm_id, public_key) do
invoke_host_function_op
|> RPCCalls.simulate(source_account, sequence_number, addl_resources)
|> RPCCalls.simulate(
server,
network_passphrase,
source_account,
sequence_number,
addl_resources
)
|> RPCCalls.send_transaction(
server,
network_passphrase,
source_account,
sequence_number,
signature,
Expand All @@ -49,19 +66,39 @@ defmodule Soroban.Contract.DeployContract do
end

@spec retrieve_unsigned_xdr_to_deploy(
server :: server(),
network_passphrase :: network_passphrase(),
wasm_id :: wasm_id(),
source_public_key :: binary(),
addl_resources :: addl_resources()
) :: envelope_xdr()
def retrieve_unsigned_xdr_to_deploy(wasm_id, source_public_key, addl_resources \\ []) do
with {:ok, seq_num} <- Accounts.fetch_next_sequence_number(source_public_key),
def retrieve_unsigned_xdr_to_deploy(
%Server{} = server,
network_passphrase,
wasm_id,
source_public_key,
addl_resources \\ []
) do
with {:ok, seq_num} <- RPC.fetch_next_sequence_number(server, source_public_key),
%Account{} = source_account <- Account.new(source_public_key),
%SequenceNumber{} = sequence_number <- SequenceNumber.new(seq_num),
%InvokeHostFunction{} = invoke_host_function_op <-
create_host_function_deploy_op(wasm_id, source_public_key) do
invoke_host_function_op
|> RPCCalls.simulate(source_account, sequence_number, addl_resources)
|> RPCCalls.retrieve_unsigned_xdr(source_account, sequence_number, invoke_host_function_op)
|> RPCCalls.simulate(
server,
network_passphrase,
source_account,
sequence_number,
addl_resources
)
|> RPCCalls.retrieve_unsigned_xdr(
server,
network_passphrase,
source_account,
sequence_number,
invoke_host_function_op
)
end
end

Expand Down
Loading
Loading