Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main' into feat/add_stellar_ledger
Browse files Browse the repository at this point in the history
  • Loading branch information
willemneal committed Nov 18, 2024
2 parents 0aaf7c5 + 90db678 commit 8799cd0
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 38 deletions.
1 change: 1 addition & 0 deletions cmd/crates/soroban-spec-typescript/ts-tests/initialize.sh
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ function deploy_all() {
}
function bind() {
exe eval "./soroban contract bindings typescript --contract-id $(cat $1) --output-dir ./node_modules/$2 --overwrite"
exe eval "sh -c \"cd ./node_modules/$2 && npm install && npm run build\""
}
function bind_all() {
bind contract-id-custom-types.txt test-custom-types
Expand Down
68 changes: 30 additions & 38 deletions cmd/soroban-cli/src/commands/contract/bindings/typescript.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,13 @@ use soroban_spec_tools::contract as contract_spec;
use soroban_spec_typescript::{self as typescript, boilerplate::Project};
use stellar_strkey::DecodeError;

use crate::print::Print;
use crate::wasm;
use crate::{
commands::{contract::fetch, global, NetworkRunnable},
config::{
self, locator,
network::{self, Network},
},
config::{self, locator, network},
get_spec::{self, get_remote_contract_spec},
xdr::{Hash, ScAddress},
};

#[derive(Parser, Debug, Clone)]
Expand Down Expand Up @@ -83,20 +82,27 @@ impl NetworkRunnable for Cmd {
global_args: Option<&global::Args>,
config: Option<&config::Args>,
) -> Result<(), Error> {
let print = Print::new(global_args.is_some_and(|a| a.quiet));

let network = self.network.get(&self.locator).ok().unwrap_or_else(|| {
network::DEFAULTS
.get("testnet")
.expect("no network specified and testnet network not found")
.into()
});

let contract_id = self
.locator
.resolve_contract_id(&self.contract_id, &network.network_passphrase)?
.0;
let contract_address = ScAddress::Contract(Hash(contract_id));

let spec = if let Some(wasm) = &self.wasm {
print.infoln("Loading contract spec from file...");
let wasm: wasm::Args = wasm.into();
wasm.parse()?.spec
} else {
let network = config.map_or_else(
|| self.network.get(&self.locator).map_err(Error::from),
|c| c.get_network().map_err(Error::from),
)?;

let contract_id = self
.locator
.resolve_contract_id(&self.contract_id, &network.network_passphrase)?
.0;

print.globeln(format!("Downloading contract spec: {contract_address}"));
get_remote_contract_spec(
&contract_id,
&self.locator,
Expand All @@ -119,41 +125,27 @@ impl NetworkRunnable for Cmd {
}
std::fs::create_dir_all(&self.output_dir)?;
let p: Project = self.output_dir.clone().try_into()?;
let Network {
rpc_url,
network_passphrase,
..
} = self.network.get(&self.locator).ok().unwrap_or_else(|| {
network::DEFAULTS
.get("futurenet")
.expect("why did we remove the default futurenet network?")
.into()
});
print.infoln(format!("Network: {}", network.network_passphrase));
let absolute_path = self.output_dir.canonicalize()?;
let file_name = absolute_path
.file_name()
.ok_or_else(|| Error::FailedToGetFileName(absolute_path.clone()))?;
let contract_name = &file_name
.to_str()
.ok_or_else(|| Error::NotUtf8(file_name.to_os_string()))?;
print.infoln(format!("Embedding contract address: {contract_address}"));
p.init(
contract_name,
&self.contract_id,
&rpc_url,
&network_passphrase,
&contract_address.to_string(),
&network.rpc_url,
&network.network_passphrase,
&spec,
)?;
std::process::Command::new("npm")
.arg("install")
.current_dir(&self.output_dir)
.spawn()?
.wait()?;
std::process::Command::new("npm")
.arg("run")
.arg("build")
.current_dir(&self.output_dir)
.spawn()?
.wait()?;
print.checkln("Generated!");
print.infoln(format!(
"Run \"npm install && npm run build\" in {:?} to build the JavaScript NPM package.",
self.output_dir
));
Ok(())
}
}
Expand Down

0 comments on commit 8799cd0

Please sign in to comment.