From 636a455790f43c66a6d1719132336127d6cbf5bf Mon Sep 17 00:00:00 2001 From: Michael Vines Date: Wed, 16 Dec 2020 10:31:49 -0800 Subject: [PATCH] Create a random `-keypair.json` file alongside the program deploy artifact for easy upgrades --- Cargo.lock | 1 + sdk/cargo-build-bpf/Cargo.toml | 1 + sdk/cargo-build-bpf/src/main.rs | 35 +++++++++++++++++++++++---------- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 88c1fdb9d..e37b6fca7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3841,6 +3841,7 @@ version = "1.6.0" dependencies = [ "cargo_metadata", "clap", + "solana-sdk", ] [[package]] diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index c61af5224..739da6e03 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -12,6 +12,7 @@ publish = false [dependencies] clap = "2.33.3" cargo_metadata = "0.12.0" +solana-sdk = { path = "..", version = "1.6.0" } [features] program = [] diff --git a/sdk/cargo-build-bpf/src/main.rs b/sdk/cargo-build-bpf/src/main.rs index 297112cf5..f14840177 100644 --- a/sdk/cargo-build-bpf/src/main.rs +++ b/sdk/cargo-build-bpf/src/main.rs @@ -1,13 +1,16 @@ -use clap::{ - crate_description, crate_name, crate_version, value_t, value_t_or_exit, values_t, App, Arg, -}; -use std::{ - env, - ffi::OsStr, - fs, - path::{Path, PathBuf}, - process::exit, - process::Command, +use { + clap::{ + crate_description, crate_name, crate_version, value_t, value_t_or_exit, values_t, App, Arg, + }, + solana_sdk::signature::{write_keypair_file, Keypair}, + std::{ + env, + ffi::OsStr, + fs, + path::{Path, PathBuf}, + process::exit, + process::Command, + }, }; struct Config { @@ -166,6 +169,7 @@ fn build_bpf_package( let program_unstripped_so = target_build_directory.join(&format!("{}.so", program_name)); let program_dump = bpf_out_dir.join(&format!("{}-dump.txt", program_name)); let program_so = bpf_out_dir.join(&format!("{}.so", program_name)); + let program_keypair = bpf_out_dir.join(&format!("{}-keypair.json", program_name)); fn file_older_or_missing(prerequisite_file: &Path, target_file: &Path) -> bool { let prerequisite_metadata = fs::metadata(prerequisite_file).unwrap_or_else(|err| { @@ -186,6 +190,17 @@ fn build_bpf_package( } } + if !program_keypair.exists() { + write_keypair_file(&Keypair::new(), &program_keypair).unwrap_or_else(|err| { + eprintln!( + "Unable to get create {}: {}", + program_keypair.display(), + err + ); + exit(1); + }); + } + if file_older_or_missing(&program_unstripped_so, &program_so) { spawn( &config.bpf_sdk.join("scripts/strip.sh"),