Skip to content

Commit

Permalink
simplify mobile signer api further. build 0.2.6. one single run comma…
Browse files Browse the repository at this point in the history
…nd with topic arg
  • Loading branch information
Evanfeenstra committed Aug 1, 2023
1 parent 76eeb3c commit f70e0f4
Show file tree
Hide file tree
Showing 12 changed files with 185 additions and 265 deletions.
6 changes: 3 additions & 3 deletions sphinx-ffi/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,6 @@ lto = true # Enable Link Time Optimization
codegen-units = 1 # Reduce number of codegen units to increase optimizations.
debug = true # Enable debug symbols. For example, we can use `dwarfdump` to check crash traces.

# [[bin]]
# name = "uniffi-bindgen"
# path = "uniffi-bindgen.rs"
[[bin]]
name = "uniffi-bindgen"
path = "uniffi-bindgen.rs"
27 changes: 14 additions & 13 deletions sphinx-ffi/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,15 +97,19 @@ interface VlsResponse {
}
```

**`run_init_1(args: String, state: Bytes, msg1: Bytes, sequence?: u16)`**
**`run_init_1(topic: String, args: String, state: Bytes, msg1: Bytes, sequence?: u16)`**

**`run_init_2(args: String, state: Bytes, msg2: Bytes, sequence?: u16)`**
### mobile signer instructions

**`run_vls(args: String, state: Bytes, vls_msg: Bytes, sequence?: u16)`**
First, run an example sphinx-swarm with CLN + bitcoind

**`run_lss(args: String, state: Bytes, lss_msg: Bytes, sequence?: u16)`**
- `git clone https://github.com/stakwork/sphinx-swarm.git`
- `cd sphinx-swarm`
- `cargo run --bin cln`
- this will run CLN and bitcoind inside docker
- to shut them down you can run `./clear.sh`

### mobile signer instructions
**Implementation instructions:**

1. generate your seed: random 32 bytes
2. run `node_keys(network, seed)` to get your keys.
Expand All @@ -116,14 +120,11 @@ interface VlsResponse {
4. subscribe to topics:
- `{CLIENT_ID}/vls`, `{CLIENT_ID}/init-1-msg`, `{CLIENT_ID}/init-2-msg`, `{CLIENT_ID}/lss-msg`
5. publish to `{CLIENT_ID}/hello` to let the broker know you are ready
6. when a MQTT message is received:

- store a "sequence" number, starting as "undefined"
- load up ALL your stored State into a Map (dictionary or object) and encode with msgpack. Then run the proper function based on the topic received:
- `init-1-msg`: `run_init_1`
- `init-2-msg`: `run_init_2`
- `vls-msg`: `run_vls`
- `lss-msg`: `run_lss`
6. make a "sequence" number (starting at null, not zero)
7. when a MQTT message is received:

- load up ALL your stored State into a Map (dictionary or object) and encode with msgpack.
- `run(topics, args, state, msg, sequence)`
- after each call, store ALL the returned State:
- msgpack.decode(`response.state`)
- store each key/value pair
Expand Down
2 changes: 2 additions & 0 deletions sphinx-ffi/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ pub enum SphinxError {
BadRequest { r: String },
#[error("Bad Response: {r}")]
BadResponse { r: String },
#[error("Bad Topic: {r}")]
BadTopic { r: String },
#[error("Bad Args: {r}")]
BadArgs { r: String },
#[error("Bad State: {r}")]
Expand Down
35 changes: 27 additions & 8 deletions sphinx-ffi/src/signer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,26 @@ pub const PREV_VLS: &str = "PREV_VLS";
pub const PREV_LSS: &str = "PREV_LSS";
pub const VELOCITY: &str = "VELOCITY";

pub fn run_init_1(
pub fn run(
topic: String,
args_json: String,
easy_mp: Vec<u8>,
msg: Vec<u8>,
sequence: Option<u16>,
) -> Result<VlsResponse> {
let last = topic.split("/").last().unwrap_or("");
match last {
topics::INIT_1_MSG => Ok(run_init_1(args_json, easy_mp, msg, sequence)?),
topics::INIT_2_MSG => Ok(run_init_2(args_json, easy_mp, msg, sequence)?),
topics::VLS => Ok(run_vls(args_json, easy_mp, msg, sequence)?),
topics::LSS_MSG => Ok(run_lss(args_json, easy_mp, msg, sequence)?),
_ => Err(SphinxError::BadTopic {
r: format!("{:?}", topic),
}),
}
}

fn run_init_1(
args_json: String,
easy_mp: Vec<u8>,
msg1: Vec<u8>,
Expand All @@ -45,7 +64,7 @@ pub fn run_init_1(
Ok(VlsResponse::new(ret.0, muts)?)
}

pub fn run_init_2(
fn run_init_2(
args_json: String,
easy_mp: Vec<u8>,
msg2: Vec<u8>,
Expand All @@ -67,7 +86,7 @@ pub fn run_init_2(
Ok(VlsResponse::new(ret.0, muts)?)
}

pub fn run_vls(
fn run_vls(
args_json: String,
easy_mp: Vec<u8>,
vls_msg: Vec<u8>,
Expand Down Expand Up @@ -97,7 +116,7 @@ pub fn run_vls(
Ok(VlsResponse::new(ret, muts)?)
}

pub fn run_lss(
fn run_lss(
args_json: String,
easy_mp: Vec<u8>,
lss_msg: Vec<u8>,
Expand Down Expand Up @@ -226,7 +245,7 @@ impl VlsResponse {
}
}

pub fn run_init_1_og(
fn run_init_1_manual(
args_string: String,
state_mp: Vec<u8>,
msg1: Vec<u8>,
Expand All @@ -242,7 +261,7 @@ pub fn run_init_1_og(
Ok(ret.0)
}

pub fn run_init_2_og(
fn run_init_2_manual(
args_string: String,
state_mp: Vec<u8>,
msg1: Vec<u8>,
Expand All @@ -260,7 +279,7 @@ pub fn run_init_2_og(
Ok(ret.0)
}

pub fn run_vls_og(
fn run_vls_manual(
args_string: String,
state_mp: Vec<u8>,
msg1: Vec<u8>,
Expand All @@ -278,7 +297,7 @@ pub fn run_vls_og(
})?)
}

pub fn run_lss_og(
fn run_lss_manual(
args_string: String,
state_mp: Vec<u8>,
msg1: Vec<u8>,
Expand Down
85 changes: 25 additions & 60 deletions sphinx-ffi/src/sphinxrs.swift
Original file line number Diff line number Diff line change
Expand Up @@ -534,6 +534,7 @@ public enum SphinxError {
case InvalidNetwork(`r`: String)
case BadRequest(`r`: String)
case BadResponse(`r`: String)
case BadTopic(`r`: String)
case BadArgs(`r`: String)
case BadState(`r`: String)
case BadVelocity(`r`: String)
Expand Down Expand Up @@ -590,22 +591,25 @@ public struct FfiConverterTypeSphinxError: FfiConverterRustBuffer {
case 11: return .BadResponse(
`r`: try FfiConverterString.read(from: &buf)
)
case 12: return .BadArgs(
case 12: return .BadTopic(
`r`: try FfiConverterString.read(from: &buf)
)
case 13: return .BadState(
case 13: return .BadArgs(
`r`: try FfiConverterString.read(from: &buf)
)
case 14: return .BadVelocity(
case 14: return .BadState(
`r`: try FfiConverterString.read(from: &buf)
)
case 15: return .InitFailed(
case 15: return .BadVelocity(
`r`: try FfiConverterString.read(from: &buf)
)
case 16: return .LssFailed(
case 16: return .InitFailed(
`r`: try FfiConverterString.read(from: &buf)
)
case 17: return .VlsFailed(
case 17: return .LssFailed(
`r`: try FfiConverterString.read(from: &buf)
)
case 18: return .VlsFailed(
`r`: try FfiConverterString.read(from: &buf)
)

Expand Down Expand Up @@ -675,35 +679,40 @@ public struct FfiConverterTypeSphinxError: FfiConverterRustBuffer {
FfiConverterString.write(`r`, into: &buf)


case let .BadArgs(`r`):
case let .BadTopic(`r`):
writeInt(&buf, Int32(12))
FfiConverterString.write(`r`, into: &buf)


case let .BadState(`r`):
case let .BadArgs(`r`):
writeInt(&buf, Int32(13))
FfiConverterString.write(`r`, into: &buf)


case let .BadVelocity(`r`):
case let .BadState(`r`):
writeInt(&buf, Int32(14))
FfiConverterString.write(`r`, into: &buf)


case let .InitFailed(`r`):
case let .BadVelocity(`r`):
writeInt(&buf, Int32(15))
FfiConverterString.write(`r`, into: &buf)


case let .LssFailed(`r`):
case let .InitFailed(`r`):
writeInt(&buf, Int32(16))
FfiConverterString.write(`r`, into: &buf)


case let .VlsFailed(`r`):
case let .LssFailed(`r`):
writeInt(&buf, Int32(17))
FfiConverterString.write(`r`, into: &buf)


case let .VlsFailed(`r`):
writeInt(&buf, Int32(18))
FfiConverterString.write(`r`, into: &buf)

}
}
}
Expand Down Expand Up @@ -822,10 +831,11 @@ public func `parseResponse`(`res`: String) throws -> String {
)
}

public func `runInit1`(`args`: String, `state`: Data, `msg1`: Data, `expectedSequence`: UInt16?) throws -> VlsResponse {
public func `run`(`topic`: String, `args`: String, `state`: Data, `msg1`: Data, `expectedSequence`: UInt16?) throws -> VlsResponse {
return try FfiConverterTypeVlsResponse.lift(
try rustCallWithError(FfiConverterTypeSphinxError.lift) {
uniffi_sphinxrs_fn_func_run_init_1(
uniffi_sphinxrs_fn_func_run(
FfiConverterString.lower(`topic`),
FfiConverterString.lower(`args`),
FfiConverterData.lower(`state`),
FfiConverterData.lower(`msg1`),
Expand All @@ -834,42 +844,6 @@ public func `runInit1`(`args`: String, `state`: Data, `msg1`: Data, `expectedSeq
)
}

public func `runInit2`(`args`: String, `state`: Data, `msg2`: Data, `expectedSequence`: UInt16?) throws -> VlsResponse {
return try FfiConverterTypeVlsResponse.lift(
try rustCallWithError(FfiConverterTypeSphinxError.lift) {
uniffi_sphinxrs_fn_func_run_init_2(
FfiConverterString.lower(`args`),
FfiConverterData.lower(`state`),
FfiConverterData.lower(`msg2`),
FfiConverterOptionUInt16.lower(`expectedSequence`),$0)
}
)
}

public func `runVls`(`args`: String, `state`: Data, `vlsMsg`: Data, `expectedSequence`: UInt16?) throws -> VlsResponse {
return try FfiConverterTypeVlsResponse.lift(
try rustCallWithError(FfiConverterTypeSphinxError.lift) {
uniffi_sphinxrs_fn_func_run_vls(
FfiConverterString.lower(`args`),
FfiConverterData.lower(`state`),
FfiConverterData.lower(`vlsMsg`),
FfiConverterOptionUInt16.lower(`expectedSequence`),$0)
}
)
}

public func `runLss`(`args`: String, `state`: Data, `lssMsg`: Data, `expectedSequence`: UInt16?) throws -> VlsResponse {
return try FfiConverterTypeVlsResponse.lift(
try rustCallWithError(FfiConverterTypeSphinxError.lift) {
uniffi_sphinxrs_fn_func_run_lss(
FfiConverterString.lower(`args`),
FfiConverterData.lower(`state`),
FfiConverterData.lower(`lssMsg`),
FfiConverterOptionUInt16.lower(`expectedSequence`),$0)
}
)
}

public func `makeAuthToken`(`ts`: UInt32, `secret`: String) throws -> String {
return try FfiConverterString.lift(
try rustCallWithError(FfiConverterTypeSphinxError.lift) {
Expand Down Expand Up @@ -922,16 +896,7 @@ private var initializationResult: InitializationResult {
if (uniffi_sphinxrs_checksum_func_parse_response() != 12980) {
return InitializationResult.apiChecksumMismatch
}
if (uniffi_sphinxrs_checksum_func_run_init_1() != 44577) {
return InitializationResult.apiChecksumMismatch
}
if (uniffi_sphinxrs_checksum_func_run_init_2() != 3141) {
return InitializationResult.apiChecksumMismatch
}
if (uniffi_sphinxrs_checksum_func_run_vls() != 7208) {
return InitializationResult.apiChecksumMismatch
}
if (uniffi_sphinxrs_checksum_func_run_lss() != 41202) {
if (uniffi_sphinxrs_checksum_func_run() != 47350) {
return InitializationResult.apiChecksumMismatch
}
if (uniffi_sphinxrs_checksum_func_make_auth_token() != 13236) {
Expand Down
11 changes: 3 additions & 8 deletions sphinx-ffi/src/sphinxrs.udl
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ interface SphinxError {
InvalidNetwork(string r);
BadRequest(string r);
BadResponse(string r);
BadTopic(string r);
BadArgs(string r);
BadState(string r);
BadVelocity(string r);
Expand Down Expand Up @@ -52,13 +53,7 @@ namespace sphinxrs {
[Throws=SphinxError]
string parse_response(string res);
[Throws=SphinxError]
VlsResponse run_init_1(string args, bytes state, bytes msg1, u16? expected_sequence);
[Throws=SphinxError]
VlsResponse run_init_2(string args, bytes state, bytes msg2, u16? expected_sequence);
[Throws=SphinxError]
VlsResponse run_vls(string args, bytes state, bytes vls_msg, u16? expected_sequence);
[Throws=SphinxError]
VlsResponse run_lss(string args, bytes state, bytes lss_msg, u16? expected_sequence);
[Throws=SphinxError]
string make_auth_token(u32 ts, string secret);
[Throws=SphinxError]
VlsResponse run(string topic, string args, bytes state, bytes msg1, u16? expected_sequence);
};
19 changes: 2 additions & 17 deletions sphinx-ffi/src/sphinxrsFFI.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,13 +81,7 @@ RustBuffer uniffi_sphinxrs_fn_func_build_request(RustBuffer msg, RustBuffer secr
);
RustBuffer uniffi_sphinxrs_fn_func_parse_response(RustBuffer res, RustCallStatus *_Nonnull out_status
);
RustBuffer uniffi_sphinxrs_fn_func_run_init_1(RustBuffer args, RustBuffer state, RustBuffer msg1, RustBuffer expected_sequence, RustCallStatus *_Nonnull out_status
);
RustBuffer uniffi_sphinxrs_fn_func_run_init_2(RustBuffer args, RustBuffer state, RustBuffer msg2, RustBuffer expected_sequence, RustCallStatus *_Nonnull out_status
);
RustBuffer uniffi_sphinxrs_fn_func_run_vls(RustBuffer args, RustBuffer state, RustBuffer vls_msg, RustBuffer expected_sequence, RustCallStatus *_Nonnull out_status
);
RustBuffer uniffi_sphinxrs_fn_func_run_lss(RustBuffer args, RustBuffer state, RustBuffer lss_msg, RustBuffer expected_sequence, RustCallStatus *_Nonnull out_status
RustBuffer uniffi_sphinxrs_fn_func_run(RustBuffer topic, RustBuffer args, RustBuffer state, RustBuffer msg1, RustBuffer expected_sequence, RustCallStatus *_Nonnull out_status
);
RustBuffer uniffi_sphinxrs_fn_func_make_auth_token(uint32_t ts, RustBuffer secret, RustCallStatus *_Nonnull out_status
);
Expand Down Expand Up @@ -126,16 +120,7 @@ uint16_t uniffi_sphinxrs_checksum_func_build_request(void
uint16_t uniffi_sphinxrs_checksum_func_parse_response(void

);
uint16_t uniffi_sphinxrs_checksum_func_run_init_1(void

);
uint16_t uniffi_sphinxrs_checksum_func_run_init_2(void

);
uint16_t uniffi_sphinxrs_checksum_func_run_vls(void

);
uint16_t uniffi_sphinxrs_checksum_func_run_lss(void
uint16_t uniffi_sphinxrs_checksum_func_run(void

);
uint16_t uniffi_sphinxrs_checksum_func_make_auth_token(void
Expand Down
Loading

0 comments on commit f70e0f4

Please sign in to comment.