This repository has been archived by the owner on Apr 26, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 105
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 668120a
Showing
121 changed files
with
21,173 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
# EditorConfig helps developers define and maintain consistent | ||
# coding styles between different editors and IDEs | ||
# editorconfig.org | ||
|
||
root = true | ||
|
||
[*] | ||
|
||
indent_style = space | ||
indent_size = 2 | ||
|
||
end_of_line = lf | ||
charset = utf-8 | ||
trim_trailing_whitespace = true | ||
insert_final_newline = true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
*.pbxproj -text | ||
# specific for windows script files | ||
*.bat text eol=crlf |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
name: Setup | ||
description: Setup Node.js and install dependencies | ||
|
||
runs: | ||
using: composite | ||
steps: | ||
- name: Setup Node.js | ||
uses: actions/setup-node@v3 | ||
with: | ||
node-version-file: .nvmrc | ||
|
||
- name: Cache dependencies | ||
id: yarn-cache | ||
uses: actions/cache@v3 | ||
with: | ||
path: | | ||
**/node_modules | ||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} | ||
restore-keys: | | ||
${{ runner.os }}-yarn- | ||
- name: Install dependencies | ||
if: steps.yarn-cache.outputs.cache-hit != 'true' | ||
run: | | ||
yarn install --cwd example --frozen-lockfile | ||
yarn install --frozen-lockfile | ||
shell: bash |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
name: CI | ||
on: | ||
push: | ||
branches: | ||
- main | ||
pull_request: | ||
branches: | ||
- main | ||
|
||
jobs: | ||
lint: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v3 | ||
|
||
- name: Setup | ||
uses: ./.github/actions/setup | ||
|
||
- name: Lint files | ||
run: yarn lint | ||
|
||
- name: Typecheck files | ||
run: yarn typecheck | ||
|
||
test: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v3 | ||
|
||
- name: Setup | ||
uses: ./.github/actions/setup | ||
|
||
- name: Run unit tests | ||
run: yarn test --maxWorkers=2 --coverage | ||
|
||
build: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v3 | ||
|
||
- name: Setup | ||
uses: ./.github/actions/setup | ||
|
||
- name: Build package | ||
run: yarn prepack |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
# OSX | ||
# | ||
.DS_Store | ||
|
||
# XDE | ||
.expo/ | ||
|
||
# VSCode | ||
.vscode/ | ||
jsconfig.json | ||
|
||
# Xcode | ||
# | ||
build/ | ||
*.pbxuser | ||
!default.pbxuser | ||
*.mode1v3 | ||
!default.mode1v3 | ||
*.mode2v3 | ||
!default.mode2v3 | ||
*.perspectivev3 | ||
!default.perspectivev3 | ||
xcuserdata | ||
*.xccheckout | ||
*.moved-aside | ||
DerivedData | ||
*.hmap | ||
*.ipa | ||
*.xcuserstate | ||
project.xcworkspace | ||
|
||
# Android/IJ | ||
# | ||
.classpath | ||
.cxx | ||
.gradle | ||
.idea | ||
.project | ||
.settings | ||
local.properties | ||
android.iml | ||
|
||
# Cocoapods | ||
# | ||
example/ios/Pods | ||
|
||
# Ruby | ||
example/vendor/ | ||
|
||
# node.js | ||
# | ||
node_modules/ | ||
example/node_modules | ||
npm-debug.log | ||
yarn-debug.log | ||
yarn-error.log | ||
|
||
# BUCK | ||
buck-out/ | ||
\.buckd/ | ||
android/app/libs | ||
android/keystores/debug.keystore | ||
|
||
# Expo | ||
.expo/ | ||
|
||
# Turborepo | ||
.turbo/ | ||
|
||
# generated by bob | ||
lib/ | ||
|
||
# Uncompressed frameworks | ||
ios/WaasSdkGo.xcframework/ios-arm64/WaasSdkGo.framework | ||
ios/WaasSdkGo.xcframework/ios-arm64-simulator/WaasSdkGo.framework | ||
ios/WaasSdkGo.xcframework/ios-x86_64-simulator/WaasSdkGo.framework |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
registry=https://npm.pkg.github.com | ||
@coinbase:registry=https://npm.pkg.github.com |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
16.18.1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
{} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# Override Yarn command so we can automatically setup the repo on running `yarn` | ||
|
||
yarn-path "scripts/bootstrap.js" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
# Use the node v16 Docker container. | ||
FROM 652969937640.dkr.ecr.us-east-1.amazonaws.com/containers/node:v16 | ||
|
||
# Path to use in the destination container. | ||
WORKDIR /src | ||
|
||
# Update and install system level packages. | ||
RUN apt-get update && apt-get install | ||
|
||
# Copy the current local directory into the Docker container's WORKDIR. | ||
COPY . . | ||
|
||
# Install dependencies using the internal registry, which has some protections built in for malicious packages. | ||
RUN yarn install --unsafe-perm --registry=https://registry-npm.cbhq.net | ||
|
||
# Create a tarball of the package which will be uploaded to the registry. | ||
RUN npm pack | ||
|
||
# Move the source code to /shared, which is where Codeflow will look for the package by default. | ||
RUN mv /src /shared | ||
WORKDIR /shared |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
Copyright (c) 2018-2023 Coinbase, Inc. | ||
|
||
Licensed under the Apache License, Version 2.0 (the "License"); | ||
you may not use this file except in compliance with the License. | ||
You may obtain a copy of the License at | ||
|
||
http://www.apache.org/licenses/LICENSE-2.0 | ||
|
||
Unless required by applicable law or agreed to in writing, software | ||
distributed under the License is distributed on an "AS IS" BASIS, | ||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
See the License for the specific language governing permissions and | ||
limitations under the License. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
# React Native WaaS SDK | ||
|
||
This is the repository for the mobile React Native SDK for Wallet-as-a-Service APIs. | ||
It exposes a subset of the WaaS APIs to the mobile developer and, in particular, is | ||
required for the completion of MPC operations such as Seed generation and Transaction signing. | ||
|
||
### Prerequisites: | ||
|
||
- [node 17+](https://nodejs.org/en/download/) | ||
- [yarn 1.22+](https://yarnpkg.com/getting-started/install) | ||
|
||
For iOS development: | ||
- [Xcode 14.0+](https://developer.apple.com/xcode/) | ||
- iOS15.2+ simulator (iPhone 14 recommended) | ||
- [CocoaPods](https://guides.cocoapods.org/using/getting-started.html) | ||
|
||
For Android development: | ||
- [Android Studio](https://developer.android.com/studio) | ||
- 64-bit Android emulator | ||
- [Android NDK 30+](https://developer.android.com/ndk) | ||
|
||
## Installation | ||
|
||
1. [Create a personal access token (classic)](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token#creating-a-personal-access-token-classic) with `read:packages:` set. | ||
2. [Authenticate with your personal access token (classic).](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-npm-registry#authenticating-to-github-packages) | ||
3. [Install the package in your React Native project](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-npm-registry#installing-a-package) | ||
|
||
With `npm`: | ||
|
||
``` | ||
npm install --save @coinbase/waas-sdk-react-native | ||
``` | ||
|
||
With `yarn`: | ||
|
||
``` | ||
yarn add @coinbase/waas-sdk-react-native | ||
``` | ||
|
||
## Usage | ||
|
||
See [index.tsx](./src/index.tsx) for the list of supported APIs. | ||
|
||
## Example App | ||
|
||
This repository provides an example app that demonstrates how the APIs should be used. To run it, | ||
ensure you have XCode open and run the following from the root directory of the repository: | ||
|
||
```bash | ||
yarn install # Install packages for the root directory | ||
yarn bootstrap # Install packages for the /example directory | ||
yarn example ios --simulator "iPhone 14" # Build and start the app on iOS simulator | ||
``` | ||
|
||
> NOTE: An example Cloud API Key json file is at `example/src/.coinbase_cloud_api_key.json` | ||
> To run the example app, populate, or replace, this file with the Cloud API Key file provided to you | ||
> by Coinbase. | ||
## Recommended Architecture | ||
|
||
Broadly speaking, there are two possible approaches to using the WaaS SDK: | ||
|
||
1. Use the WaaS backends directly for all calls. | ||
2. Use the WaaS backends directly only for MPC operations; proxy all other calls through an intermediate server. | ||
|
||
Of these two approaches, we recommend approach #2, as outlined in the following diagram: | ||
|
||
![Recommended Set-up](./assets/diagram.png) | ||
|
||
The motivation for placing a proxy server in between your application and the WaaS backends are as | ||
follows: | ||
|
||
1. Your proxy server can log API calls and collect metrics. | ||
2. Your proxy server can filter results as it sees fit (e.g. policy enforcement). | ||
3. Your proxy server can perform end user authentication. | ||
4. Your proxy server can store the Coinbase API Key / Secret, rather than it being exposed to the client. | ||
5. Your proxy server can throttle traffic. | ||
|
||
In short, having a proxy server that you control in between your application and the WaaS backends will | ||
afford you significantly more control than using the WaaS backends directly in most cases. | ||
|
||
The methods from the WaaS SDK which are _required_ to be used for participation in MPC are: | ||
1. `initMPCSdk` | ||
2. `bootstrapDevice` | ||
3. `getRegistrationData` | ||
4. `computeMPCOperation` | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
buildscript { | ||
repositories { | ||
google() | ||
mavenCentral() | ||
} | ||
|
||
dependencies { | ||
classpath "com.android.tools.build:gradle:7.2.1" | ||
} | ||
} | ||
|
||
def isNewArchitectureEnabled() { | ||
return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true" | ||
} | ||
|
||
apply plugin: "com.android.library" | ||
|
||
if (isNewArchitectureEnabled()) { | ||
apply plugin: "com.facebook.react" | ||
} | ||
|
||
def getExtOrDefault(name) { | ||
return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties["WaasSdkReactNative_" + name] | ||
} | ||
|
||
def getExtOrIntegerDefault(name) { | ||
return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["WaasSdkReactNative_" + name]).toInteger() | ||
} | ||
|
||
android { | ||
compileSdkVersion getExtOrIntegerDefault("compileSdkVersion") | ||
|
||
defaultConfig { | ||
minSdkVersion getExtOrIntegerDefault("minSdkVersion") | ||
targetSdkVersion getExtOrIntegerDefault("targetSdkVersion") | ||
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() | ||
} | ||
buildTypes { | ||
release { | ||
minifyEnabled false | ||
} | ||
} | ||
|
||
lintOptions { | ||
disable "GradleCompatible" | ||
} | ||
|
||
compileOptions { | ||
sourceCompatibility JavaVersion.VERSION_1_8 | ||
targetCompatibility JavaVersion.VERSION_1_8 | ||
} | ||
|
||
} | ||
|
||
repositories { | ||
mavenCentral() | ||
google() | ||
} | ||
|
||
|
||
dependencies { | ||
// For < 0.71, this will be from the local maven repo | ||
// For > 0.71, this will be replaced by `com.facebook.react:react-android:$version` by react gradle plugin | ||
//noinspection GradleDynamicVersion | ||
implementation "com.facebook.react:react-native" | ||
} | ||
|
||
if (isNewArchitectureEnabled()) { | ||
react { | ||
jsRootDir = file("../src/") | ||
libraryName = "WaasSdkReactNative" | ||
codegenJavaPackageName = "com.waassdkreactnative" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
WaasSdkReactNative_kotlinVersion=1.7.0 | ||
WaasSdkReactNative_minSdkVersion=21 | ||
WaasSdkReactNative_targetSdkVersion=31 | ||
WaasSdkReactNative_compileSdkVersion=31 | ||
WaasSdkReactNative_ndkversion=21.4.7075529 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||
package="com.waassdkreactnative"> | ||
|
||
</manifest> |
Oops, something went wrong.
2 comments
on commit 668120a
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yarn.lock
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This comment has been minimized.
Sorry, something went wrong.
mrNmrsBenejamOct 13, 2023