ðãã«ãã·ã°ã»AAã»MPCã«ã€ããŠãWeb3 ã»ãã¥ãªãã£ã
çãããããã«ã¡ã¯ïŒ
å æ¥ãUNCHAINã§ãã«ãã·ã°ãããŒããšããå匷äŒãå®æœããã®ã§ãããæãã®ã»ãåé¿ããããŸããã®ã§å€ãã®æ¹ã«ã·ã§ã¢ããããšæããããã°ã§ããŸãšããããšã«ããŸããïŒ
ãã² UNCHAINã«èå³ã®ããæ¹ã¯äžã®ãªã³ã¯ãããšã³ããªãŒããŠã¿ãŠãã ããïŒ
æ¬åœã«çŽ æŽãããã³ãã¥ããã£ã§ããïŒïŒ
ç®æ¬¡
- ãã«ãã·ã°ã«ã€ããŠ
- ãã«ãã·ã°ã³ã³ãã©ã¯ãã®å®è£ äŸã«ã€ããŠ
- ãã¢
- æ®èª²é¡ãšæ¡åŒµæ§ã«ã€ããŠ
- ãã«ãã·ã°ãšã³ã³ãã©ã¯ããŠã©ã¬ããã«ã€ããŠ
- ãã«ãã·ã° VS MPC
- æåŸã«
1. ãã«ãã·ã°ã«ã€ããŠ
ãããããã«ãã·ã°ãšã¯ïŒ
æ¥æ¬ã®æå·è³ç£äº€ææã§ããã°ã亀ææã®ã©ã€ã³ã»ã³ã¹ãååŸããããã«é¡§å®¢è³ç£ãã³ãŒã«ããŠã©ã¬ãããšãã«ãã·ã°ã®ä»çµã¿ãå©çšããŠç®¡çããããšã¯å¿ é ãšãªã£ãŠããŸãïŒ
倧äºãªé¡§å®¢è³ç£(ãããèšå€§ãªé¡)ã管çããããšã«ãªãã®ã§ãå éšäžæ£ãé²ããšããæå³ã§ãã«ãã·ã°ã¯éèŠãªéµãæ¡ã£ãŠãããšèããŠããŸãã
ðœ æåãªæå·è³ç£äº€ææã§ãåãå ¥ããããŠããŸãïŒ
ãããã³ã€ã³ãšã€ãŒãµãªã¢ã ã§ã®å®è£ ã®éã
ãã«ãã·ã°ãšãã£ãŠããã®å®è£ æ¹æ³ã¯ããããã³ã«ã¬ã€ã€ãŒã§ãããããã¯ãã§ãŒã³ã®ä»æ§ã«ããªãå·Šå³ãããããšã«ãªããäŸãã°ããããã³ã€ã³ãšã€ãŒãµãªã¢ã ãæ¯èŒããŠã次ã®æ§ãªéãããããŸãã
ãããã³ã€ã³ | ã€ãŒãµãªã¢ã | |
---|---|---|
æšæºã§ããã | ãã«ãã·ã°ã¯æšæºä»æ§ãšããŠååšããŠããã | ãã«ãã·ã°ã¯æšæºä»æ§ã§ã¯ãªãã |
éçºèšèªç | bitcore-jsãªã©ã®ã©ã€ãã©ãªã䜿ãã°ãã«ãã·ã°ãŠã©ã¬ãããäœæããããšãã§ããã | æšæºã§ã¯ãªãã®ã§Solidityãªã©ã§èªåéã§äœããäºæ¥è ãæäŸããŠãããã®ãå©çšããå¿ èŠããã |
ã»ãã¥ãªãã£äžã®çæç¹ | æšæºã©ã€ãã©ãªã®æ©èœãšããŠæäŸãããŠããã®ã§ãã®ã©ã€ãã©ãªãä¿¡ãããããªãããäžãäžè匱æ§ãèŠã€ãã£ãå Žåã«ã¯ããŒãžã§ã³ã¢ãããªã©ã®å¯Ÿå¿ãå¿ èŠ | ã³ãŒããæžãããšã«ãªããããåçšã®éã«ã¯ç£æ»ã®å®æœãå¿ é ãšãªãããã®ä»ãSolidityã®ä»æ§ãææ¡ããäžã§ã³ãŒãã£ã³ã°ããŠããããšãå¿ èŠã |
äžèšã¯ããããã³ã€ã³ãšã€ãŒãµãªã¢ã ãæ¯èŒããå Žåã®è©±ããã®ä»ã®ãã§ãŒã³ãèæ ®ããå¿ èŠããããã®ã§æ¥æ¬ã®äº€ææã¯æ°ãããã§ãŒã³ã«å¯Ÿå¿ããã®ã«ããªãèŠåŽããŠããã®ã§ã¯ãªãããšèããããŸãã»ã»ã
2. ãã«ãã·ã°ã³ã³ãã©ã¯ãã®å®è£ äŸã«ã€ããŠ
ä»åã¯ãéåžžã«ã·ã³ãã«ãªãã«ãã·ã°ã³ã³ãã©ã¯ãã®ä»çµã¿ããã³ãçµµã«ãŸãšããŠã¿ãŸããïŒ
factoryã³ã³ãã©ã¯ããä»ããŠãã«ãã·ã°ã³ã³ãã©ã¯ããçæããããšã§ã䜿ãç°å¢ã«ãã£ãownerã®ã¢ãã¬ã¹æ°ãšéŸå€ã決ããããšãã§ããŸãïŒ
ãã®å Žåã§ããã°äžèšã®ããã«åŠçãé²ããŠç®çã®ã¢ãã¬ã¹ã«ééããŸãïŒ
æ žãšãªãMulitiSigWalletã³ã³ãã©ã¯ããšããŠã¯ä»¥äžã®ãããªå®è£ äŸããããŸãïŒ(Solidity by Exampleããæç²ããŠããŸããã)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract MultiSigWallet {
event Deposit(address indexed sender, uint amount, uint balance);
event SubmitTransaction(
address indexed owner,
uint indexed txIndex,
address indexed to,
uint value,
bytes data
);
event ConfirmTransaction(address indexed owner, uint indexed txIndex);
event RevokeConfirmation(address indexed owner, uint indexed txIndex);
event ExecuteTransaction(address indexed owner, uint indexed txIndex);
address[] public owners;
mapping(address => bool) public isOwner;
uint public numConfirmationsRequired;
struct Transaction {
address to;
uint value;
bytes data;
bool executed;
uint numConfirmations;
}
// mapping from tx index => owner => bool
mapping(uint => mapping(address => bool)) public isConfirmed;
Transaction[] public transactions;
modifier onlyOwner() {
require(isOwner[msg.sender], "not owner");
_;
}
modifier txExists(uint _txIndex) {
require(_txIndex < transactions.length, "tx does not exist");
_;
}
modifier notExecuted(uint _txIndex) {
require(!transactions[_txIndex].executed, "tx already executed");
_;
}
modifier notConfirmed(uint _txIndex) {
require(!isConfirmed[_txIndex][msg.sender], "tx already confirmed");
_;
}
constructor(address[] memory _owners, uint _numConfirmationsRequired) {
require(_owners.length > 0, "owners required");
require(
_numConfirmationsRequired > 0 &&
_numConfirmationsRequired <= _owners.length,
"invalid number of required confirmations"
);
for (uint i = 0; i < _owners.length; i++) {
address owner = _owners[i];
require(owner != address(0), "invalid owner");
require(!isOwner[owner], "owner not unique");
isOwner[owner] = true;
owners.push(owner);
}
numConfirmationsRequired = _numConfirmationsRequired;
}
receive() external payable {
emit Deposit(msg.sender, msg.value, address(this).balance);
}
function submitTransaction(
address _to,
uint _value,
bytes memory _data
) public onlyOwner {
uint txIndex = transactions.length;
transactions.push(
Transaction({
to: _to,
value: _value,
data: _data,
executed: false,
numConfirmations: 0
})
);
emit SubmitTransaction(msg.sender, txIndex, _to, _value, _data);
}
function confirmTransaction(
uint _txIndex
) public onlyOwner txExists(_txIndex) notExecuted(_txIndex) notConfirmed(_txIndex) {
Transaction storage transaction = transactions[_txIndex];
transaction.numConfirmations += 1;
isConfirmed[_txIndex][msg.sender] = true;
emit ConfirmTransaction(msg.sender, _txIndex);
}
function executeTransaction(
uint _txIndex
) public onlyOwner txExists(_txIndex) notExecuted(_txIndex) {
Transaction storage transaction = transactions[_txIndex];
require(
transaction.numConfirmations >= numConfirmationsRequired,
"cannot execute tx"
);
transaction.executed = true;
(bool success, ) = transaction.to.call{value: transaction.value}(
transaction.data
);
require(success, "tx failed");
emit ExecuteTransaction(msg.sender, _txIndex);
}
function revokeConfirmation(
uint _txIndex
) public onlyOwner txExists(_txIndex) notExecuted(_txIndex) {
Transaction storage transaction = transactions[_txIndex];
require(isConfirmed[_txIndex][msg.sender], "tx not confirmed");
transaction.numConfirmations -= 1;
isConfirmed[_txIndex][msg.sender] = false;
emit RevokeConfirmation(msg.sender, _txIndex);
}
function getOwners() public view returns (address[] memory) {
return owners;
}
function getTransactionCount() public view returns (uint) {
return transactions.length;
}
function getTransaction(
uint _txIndex
)
public
view
returns (
address to,
uint value,
bytes memory data,
bool executed,
uint numConfirmations
)
{
Transaction storage transaction = transactions[_txIndex];
return (
transaction.to,
transaction.value,
transaction.data,
transaction.executed,
transaction.numConfirmations
);
}
}
ãã®ä»ã«ãhttps://solidity-by-example.org/app/multi-sig-wallet/ ãyoutubeãªã©ã«ã·ã³ãã«ãªãã«ãã·ã°ã³ã³ãã©ã¯ããäœæããæ¹æ³ã¯èšèŒãããŠããŸãïŒ
ãã®ä»ãã»ãã¥ãªãã£ã®ã¹ãã·ã£ãªã¹ããšãèšããBitGo瀟ãGnosisSafeãäœæããŠãããã«ãã·ã°ã³ã³ãã©ã¯ããããããã¡ãã¯ãã¹ããã³ãŒãã®ãªã©ãããªããã£ããããŠãããæ§é ãäžã®ã³ã³ãã©ã¯ãããè€éã«ãªã£ãŠããŸãïŒ
ã»ãã¥ã¢ãªã³ãŒããéçºããã®ã¯é£æ床ããã¯ãé«ããã§ãã»ã»ã»ã
3. ãã¢
ãã¢ã§ã¯ã2-of-3ã®ãã«ãã·ã°ã³ã³ãã©ã¯ããäœæããŠå®éã«çœ²åã»ééãè¡ããŸãïŒ
ãã¢ã§ãã£ãããš
- 2-0f-3ã®ãã«ãã·ã°ã³ã³ãã©ã¯ããŠã©ã¬ãããäœæããã
- ãã©ã³ã¶ã¯ã·ã§ã³ããŒã¿ãäœæããã
- 1.ã§äœæãããã«ãã·ã°ã³ã³ãã©ã¯ããŠã©ã¬ããã«ééçšã®ETHãdepositããã
- 2人ã®ownerã«ããæ¿èªåŠçãå®æœããã
- ééåŠçãå®è¡ããã
- ééçµæã確èªããïŒ
ãã¢ã§å©çšããã¢ãã¬ã¹
owner1 : 0x51908F598A5e0d8F1A3bAbFa6DF76F9704daD072
owner2 : 0x9f9115893713934AA5AFd3540937eB60ea43eb3a
owner3 : 0xb5a05Af300C50baAadE18f8EA8AA7e856177Afe8
éä¿¡å ïŒ0xEef377Bdf67A227a744e386231fB3f264C158CDF
å®éã«ãããã€ããŠããã³ã³ãã©ã¯ãã®æ å ±
No. | ã³ã³ãã©ã¯ãå | ãããã¯ãŒã¯ | ã¢ãã¬ã¹ |
---|---|---|---|
1 | WalletFactory | Goerli | 0x3c955E552Fd383435765313330301c23f014e0a6 |
2 | MultiSigWallet | Goerli | 0x5ba5DF0955d0C95500966acE28041F3D7BC45D1D |
3 | WalletFactory | Mumbai | 0xFEbf942Ce0f403a48a01D4757710289E0458bca9 |
4 | MultiSigWallet | Mumbai | 0x455d21AE3F9Cdd21365757B5528bbE3b3eCC1C1A |
4. æ®èª²é¡ãšæ¡åŒµæ§ã«ã€ããŠ
çŸæ®µéã§æããŠããæ®èª²é¡ã»æ¡åŒµæ§ã«ã€ããŠã¯ä»¥äžã®éãã§ãã
- æ®èª²é¡
No | èª²é¡ |
---|---|
1 | ééåŠçã«ã®ã¿ãã察å¿ããŠããªãããš |
2 | ãã£ãšã»ãã¥ã¢ã«ããããã«ã¯ãecrecover()ãªã©ãå©çšããŠæ€èšŒãå³æ Œåããå¿ èŠãããã |
3 | ã©ããªã¢ã«ãŠã³ãã§ããã«ãã·ã°ãäœããŠããŸãç¶æ ã«ãªã£ãŠããã |
4 | ã©ããªã¢ã«ãŠã³ãã§ããã«ãã·ã°ãäœããŠããŸãç¶æ ã«ãªã£ãŠããã |
5 | èãã«ããããè€æ°ã®ããŒã ããã«ãã·ã°ã³ã³ãã©ã¯ããå ±æããŠããå Žåã«ãè³éãæãããå¯èœæ§ãããã |
- æ¡åŒµæ§
No | é ç® |
---|---|
1 | çŸåšæµè¡ãã®AAã«ã䜿ããèšèšãã¿ãŒã³ãªã®ã§ãç§å¯éµãå¿ èŠãšããªããŠã©ã¬ããã¢ããªãéçºã§ãããïŒâ Web3ã®ãã¹ã¢ããªãã·ã§ã³ïŒ |
2 | NFTã®çºè¡åŠçãªã©éé以å€ã®åŠçã«ãå¿çšã§ããã°ãŠã©ã¬ãããšããŠãååã«æ©èœããã¯ããªã®ã§ãããã«ãœã³ãªã©ã§ãã£ãŠã¿ããã |
5. ãã«ãã·ã°ãš ã³ã³ãã©ã¯ããŠã©ã¬ããã«ã€ããŠ
MultiSigWalletã³ã³ãã©ã¯ãã«ã¯ããã³ã³ãã©ã¯ããŠã©ã¬ããããšããèãæ¹ãæ¡çšãããŠããŸãã
ã³ã³ãã©ã¯ããŠã©ã¬ããã®å¿çšãšããŠã¯ã**AA(Account Abstraction)ãããªãçãäžãã£ãŠããŠãããETHIndiaã§ãAA(Account Abstraction)**ã®èãæ¹ãæ¡çšãããããã¯ãã1st prizeãç²åŸãããªã©æ³šç®ãéããŠããŸãã
AAã¯äœ¿ã£ãŠããŸãããããã£ãããªã®ã§ã³ã³ãã©ã¯ããŠã©ã¬ãããšAAã®èãæ¹ã«ã€ããŠã觊ããŠãããããšæããŸãïŒïŒ
äžæŠãé¢é£çšèªã®æŽçãããŸãïŒ
EIP-4337ã®è©³çŽ°ã«ã€ããŠã¯ãŽã£ã¿ãªãã¯ããã®èšäºã®äžã§ã玹ä»ãããŠããã
éèŠã«ãªãã®ã¯ãBundlerãšãšã³ããªãŒãã€ã³ãã³ã³ãã©ã¯ã!!
ä»åã®ãã¢ã§å ±æãããã«ãã·ã°Dappdeã§ã¯ãfactoryã³ã³ãã©ã¯ãããMultiSigWalletã³ã³ãã©ã¯ããçæããowneréã®å ±æã®è³éããŒã«ãšããŠMultiSigWalletã³ã³ãã©ã¯ããå©çšããŠããŸãã(è€æ°äººã§äžã€ã®ãŠã©ã¬ãããå ±æããŠäœ¿ã£ãŠããã€ã¡ãŒãž)
AAãšããŠå®è£ ãããŠã¯ããªãã®ã§ãŠãŒã¶ãŒã§ããownerã¯ãèªåã§éµãææããŠçœ²åãè¡ãå¿ èŠããããŸãããå®è¡ããããã©ã³ã¶ã¯ã·ã§ã³ããŒã¿ãã³ã³ãã©ã¯ããŠã©ã¬ããã«ç»é²ããŠããããã®åŸå®è¡æ瀺ãåºããŠééçšã®ãã©ã³ã¶ã¯ã·ã§ã³ãå®è¡ããŠããŸãã(ETHãåºãã®ã¯ã³ã³ãã©ã¯ããŠã©ã¬ããããïŒ)
å€ããã¿ããšå人ã®ãŠã©ã¬ãã(EOA)ãšäœãå€ãããªãããã«æ¯ãèã£ãŠããŸãããéåžžã®ãŠã©ã¬ãããšç°ãªãç¹ãæŽçãããšäžèšã®éãã§ãã
- å人ã®ãŠã©ã¬ãã(EOA)ã®ããã«ç§å¯éµãååšããªãããš
- æ¿èªãäžå®æ°åŸãããåŸå®å ã®ã¢ãã¬ã¹ã«ETHãéããšããæ©èœãæã£ãŠããããš
- depositæ©èœãæã£ãŠããããš
ã³ã³ãã©ã¯ããŠã©ã¬ããã®èãæ¹ã«ã€ããŠã¯äžèšã®èšäºãšã¹ã©ã€ãããããããããŸãšããŠãããŠããŸãïŒ
AAã«ã€ããŠããã«æ·±ãç¥ããããšããæ¹ã¯ãCryptoGamesã®Yukiããããããããã解説ããŠãããŠããèšäºãããã®ã§ãã¡ããåç §ãããããããŸãïŒ
ERC-4337ã§å®è£ ãããã·ã¹ãã ãã©ã®ããã«åãã®ãå®éã«æãåãããŠã¿ãããšããæ¹ã¯ãStackUp瀟ããµã³ãã«ã®ãªããžããªãå ¬éããŠãããŠããã®ã§ãæ軜ã«AAãå©çšããééã®ä»çµã¿ãäœéšããããšãã§ããŸãïŒ
-
ééåŠçã®å®è¡äŸ
- MATICã®ééåŠç
Signed UserOperation: { "sender": "0x100cD9e97EdAEe0950d97f75251313e45213C8Fb", "nonce": "0x0", "initCode": "0xe19e9755942bb0bd0cccce25b1742596b8a8250b3bf2c3e700000000000000000000000078d4f01f56b982a3b03c4e127a5d3afa8ebee68600000000000000000000000051908f598a5e0d8f1a3babfa6df76f9704dad0720000000000000000000000000000000000000000000000000000000000000000", "callData": "0x80c5c7d00000000000000000000000001431ea8af860c3862a919968c71f901aede1910e000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", "callGasLimit": "0x5580", "verificationGasLimit": "0x129727", "maxFeePerGas": "0xa2c22e83", "maxPriorityFeePerGas": "0xa2c22e65", "paymasterAndData": "0x", "preVerificationGas": "0xc644", "signature": "0xff954fe43538bf8fff0f928aa03f58c62b7c28d9b14912c4e1b452853124bd622053de4915a85e55697f714e80bf7668670e043467d2116df33979a1c2fd2f551b" } UserOpHash: 0x854c14b08bd913b7960edc3d4cbef6d65666e20e1494c4a0831a46cb18829fd1 Waiting for transaction... Transaction hash: 0xc561b6a5410ffc8c10bd36b4102a08e57dc92040e4706526c3acedc42143d20d âš Done in 13.44s.
- ERC20èŠæ ŒããŒã¯ã³ã®ééåŠç
Transferring 0.04 LINK... Signed UserOperation: { "sender": "0x100cD9e97EdAEe0950d97f75251313e45213C8Fb", "nonce": "0x1", "initCode": "0x", "callData": "0x80c5c7d0000000000000000000000000326c977e6efc84e512bb9c30f76e30c160ed06fb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044a9059cbb0000000000000000000000001431ea8af860c3862a919968c71f901aede1910e000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000", "callGasLimit": "0xe6fc", "verificationGasLimit": "0x186a0", "maxFeePerGas": "0xca0f4bb3", "maxPriorityFeePerGas": "0xca0f4b95", "paymasterAndData": "0x", "preVerificationGas": "0xc37c", "signature": "0x06bcf3dcded028a8c42ef90c72f4fea98e54ecd4da2366288cb50851ee60ee0512d6f74a998633109d9352ad0453e3665aa3171147bcf8a876676449499eeef61b" } UserOpHash: 0xade156da0c2b036926618ed914b2f87dca006d14ba4de29e949326be89cc4096 Waiting for transaction... Transaction hash: 0xdc695a878c6bbfa8e149ea19fddcaad782f98707971d81201d4954113810dd2c âš Done in 13.16s.
- MATICã®ééåŠç(è€æ°ã®äžæ¬éé)
Signed UserOperation: { "sender": "0x100cD9e97EdAEe0950d97f75251313e45213C8Fb", "nonce": "0x0", "initCode": "0x", "callData": "0x80c5c7d0000000000000000000000000100cd9e97edaee0950d97f75251313e45213c8fb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000204d0cb75fa000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000100cd9e97edaee0950d97f75251313e45213c8fb000000000000000000000000100cd9e97edaee0950d97f75251313e45213c8fb0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000044a9059cbb00000000000000000000000051908f598a5e0d8f1a3babfa6df76f9704dad07200000000000000000000000000000000000000000000000003782dace9d90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044a9059cbb0000000000000000000000001431ea8af860c3862a919968c71f901aede1910e00000000000000000000000000000000000000000000000003782dace9d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "callGasLimit": "0xe31a", "verificationGasLimit": "0x186a0", "maxFeePerGas": "0x7d7a574e", "maxPriorityFeePerGas": "0x7d7a5730", "paymasterAndData": "0x", "preVerificationGas": "0xd56c", "signature": "0x804964cc35c21fcb0fd1b4c4fe854a9deb5c7ea9117d68c31b4948914d282fdc53812ebb003ee542e35af8793b60917b0600be54fd05192598a6df396c6c47a81b" } UserOpHash: 0x77b6dd28dbd8691ea0ae23cc63bbd32f18889723e1c31f04cf534ae7e47569e5 Waiting for transaction... Transaction hash: 0x381f4d559a033559d38370b24280ecad09017bf657f41e6eb277a0691cf5f248 âš Done in 16.04s.
- ERC20èŠæ ŒããŒã¯ã³ã®ééåŠç(è€æ°ã®äžæ¬éé)
Batch transferring 0.04 LINK to 2 recipients... Signed UserOperation: { "sender": "0x100cD9e97EdAEe0950d97f75251313e45213C8Fb", "nonce": "0x2", "initCode": "0x", "callData": "0x80c5c7d0000000000000000000000000100cd9e97edaee0950d97f75251313e45213c8fb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000204d0cb75fa000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000326c977e6efc84e512bb9c30f76e30c160ed06fb000000000000000000000000326c977e6efc84e512bb9c30f76e30c160ed06fb0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000044a9059cbb0000000000000000000000001431ea8af860c3862a919968c71f901aede1910e000000000000000000000000000000000000000000000000008e1bc9bf040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044a9059cbb00000000000000000000000051908f598a5e0d8f1a3babfa6df76f9704dad072000000000000000000000000000000000000000000000000008e1bc9bf0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "callGasLimit": "0xea85", "verificationGasLimit": "0x186a0", "maxFeePerGas": "0x99adc148", "maxPriorityFeePerGas": "0x99adc12a", "paymasterAndData": "0x", "preVerificationGas": "0xd560", "signature": "0x9efbbce4eedb58268350032f6033db120bfe54d34ca920bb15ff72c46f681a2032b2609cb910b646abb5cd87b65a5e1d1e86205bcc64e60d971fff210e72cd611c" } UserOpHash: 0x856e6d3741c710a76eb4e300fee208b8a33f93425f59be5ed3fea4a35ace9db9 Waiting for transaction... Transaction hash: 0xab22e6bf970c6784aa6d9aa0e44a19adf428999b28370fbe4390fdcc63a31c63 âš Done in 16.64s.
æ®èª²é¡ã«ãèšèŒããéããç§å¯éµãå¿ èŠãšããªããŠã©ã¬ããã¢ããª(ãã®ä»£ããKYCã«ã¯å³æ Œãªä»æ§ãæ±ããããã¯ã)ã®éçºã«ãç¹ãããããã§ãïŒ!
ä»ã®ç¶æ ã§ã¯ã»ãã¥ãªãã£ãæèããä»çµã¿ã«ãªã£ãŠããŸãããæ§ã ãªãŠãŒã¹ã±ãŒã¹ã«ãå¿çšãå¹ããããªæ°ãããŠããŸãïŒ
å æ¥ãETHIndiaã§1st prizeãç²åŸããFireWalletã§ãAAã®èãæ¹ãæ¡çšãããŠãããä»åŸã¯äœ¿ããããäžã€å®å šãªãŠã©ã¬ãããèºèµ·ã«ãªã£ãŠéçºããåãã掻çºåããŠãããšèããããã®ã§ãã¯ããã®èšèšãã¿ãŒã³ã¯ãã¹ã¿ãŒãããã»ã»ïŒ
ç§å¯éµã®ç®¡çã¯ãWeb3ã®ãã¹ã¢ããã·ã§ã³ã劚ããŠãã倧ããªèŠå ã®äžã€ã ãšèããŠãããAIãã¯ã©ãŠããªã©ã®æ§ãªäžã®äžã«åãå ¥ããããæ±çšçãªæè¡ã«æè¯ããããã«ã¯ãã®èª²é¡è§£æ±ºãå¿ é ïŒïŒ
ãã ãäžã«ã¯AAã浞éããŠããããšã«ã€ããŠçåèŠããæ¹ãããã®ã§ãã©ã®ãããªãŠã©ã¬ããããã£ãšãåãå ¥ããããŠãããã¯ãåŒãç¶ãã¢ã³ããã貌ã£ãŠæ å ±ãåéãã€ã€ãããã«ãœã³ãªã©ã«åºãŠãããã¿ã€ããäœã£ãŠããããšãéèŠã ãšèããŠããŸãïŒïŒ
åçµDAOã®ukishimaããã®ãã€ãŒãã¯åèã«ãªããŸããïŒïŒ
6. ãã«ãã·ã° VS MPC
ãã«ãã·ã°ãšäžŠãã§ãWeb3é åã§æ³šç®ãããŠããæè¡ã MPC(ãã«ãããŒãã£èšç®)ã掻çšãã眲åã®ä»çµã¿ã§ã!!
ãŸãçšèªã®æŽçãšããŠãç§å¯èšç®ã»ç§å¯åæ£ã»MPCã®æå³ãæŽçããŸãïŒ
ãã®ç§å¯èšç®ã®ä»çµã¿ãå®çŸãããããã«äž»èŠãªæ¹æ³ã2çš®é¡ååšããïŒððððððð
- æºååæå·æ¹åŒ
- ç§å¯åæ£æ¹åŒ
ç§å¯èšç®ãšç§å¯åæ£ã«ã€ããŠè©³ããç¥ãããæ¹ã¯ãäžèšãªã³ã¯ã確èªããŠãã ããïŒ
â ç§å¯åæ£ãå©çšããŠç§å¯éµãåæ£ããããããå床ç§å¯éµã埩å âš ã¢ãã¬ã¹åŸ©å âš ééãŸã§ããã¹ãã§ããç°¡æã¹ã¯ãªãããäœæããŠã¿ãŸããã®ã§èå³ããæ¹ã¯ãã²ãã¡ããïŒïŒ
ç§å¯éµã®ããŒã¿ããã®ãŸãŸäœ¿ããã«ãã·ã°ã«æ¯ã¹ãŠãåäœã§ã¯æå³ã®ãªãããŒã¿ã«åå²ããŠç®¡çããããšã«ãªãMPCã®æ¹ãããã»ãã¥ã¢ã ãšèããŠãããŠããŸãã(äžãäžãäžç®æã§æŒããŠããã¡ãŒãžã¯MPCã®æ¹ãå°ããã¯ãã§ãã)
æ¯èŒè¡š
ãã«ãã·ã°(ããã§ã¯æ¯èŒã®ãããã¹ãã³ã³ã«ãããã«ãã·ã°ãæ³å®) | MPC | |
---|---|---|
眲ååŠçã®å®è¡å Žæ | ãªã³ãã§ãŒã³ | ãªããã§ãŒã³ |
å®è£ é£æ床 | äž | é« |
å¿çšã®å¹ | ãããã³ã€ã³ãšã€ãŒãµãªã¢ã ã®æ§ã«å¯Ÿå¿ãããã§ãŒã³ã®ä»æ§ã«ãã£ãŠããã°ã©ã ãå€ããã®ã§è€æ°ãã§ãŒã³ã«å¯Ÿå¿ãããã®ã¯è³é£ã®æã ãšèããŠããã | ãããã¯ãã§ãŒã³ãããã³ã«ã®åœ±é¿ãåãã«ããã®ã§å€æ°ã®ãã§ãŒã³ã«å¿çšãå¹ãããããšèããããŠããã |
å®è£ é£æ床ã¯ãå§åçã«MPCã®æ¹ãé«ãã§ããå®è£ ã§ããã°å¿çšãå¹ããã®ã§ãïŒ
ãã«ãã·ã°ã®æ¹ã¯ãEVM察å¿ã®ãã§ãŒã³ã§ããã°ãã«ãã·ã°ã³ã³ãã©ã¯ãã䜿ããŸããã°è¡ãããããããŸãããããããã³ã€ã³ãNEARãªã©ã®ãã§ãŒã³ãªã©ã«å¯Ÿå¿ãããšãªããšãŸãéãã®ã§å¯Ÿå¿ã倧å€ã§ãããããã³ã«ã¬ã€ã€ãŒã«ãã£ãŠå·Šå³ãããŠããŸãã®ã¯éªšãæãããšããã
ãã£ãšç¥ãããïŒïŒãšããæ¹ã¯äžèšã®èšäºãããããã§ãïŒ
7. æåŸã«
ãŠã©ã¬ããã³ã³ãã©ã¯ãã®èãæ¹ãšåããããšãã¡ããã¡ãã»ãã¥ã¢ãªãŠã©ã¬ããã¢ããªãäœããããïŒïŒã(KYCã¯ãŒãç¥è蚌æãçäœèªèšŒãªã©ã掻çšããŠå³æ Œåiã¯å¿ é ã§ããïŒïŒ)
çµå±ã©ããã«å¿ ããã©ã¹ããã€ã³ããçãŸããã®ã§ããããåŠäœã«å®ããªããé åçãªã¢ããªãæäŸããŠãããããéèŠãªãã€ã³ãã«ãªãããã§ãïŒ(äžè¬ãŠãŒã¶ãŒãå šå¡å ¬ééµæå·æ¹åŒã®ããšãç解ã§ããã°è¯ãã®ã§ãããå®çŸã§ãããšããŠããšãã§ããªãæéããããããã§ãã»ã»ã)
ããšã¯ãMetaMaskã ãšUXçã«ãå°ãããŒãã«ãé«ãã®ã§ãã£ãšã·ã³ãã«ãªãããã¯ãã«ããå¿ èŠãããããã§ããäžã®ãã€ãŒãã¯é¢çœããšæã£ãäžäŸã§ãããæ茪ã®äžã«çœ²åéµãå ¥ããŠãããŠããã§çœ²åãšãã§ãããèŠãç®çã«ããªã·ã£ã¬ã ã䜿ããããã®ã§äžã®äžã«æµžéãããã§ããïŒ
ãŠã©ã¬ããã®è©±ã«ãªããšãœãããŠã§ã¢ã ãã§ãªãããŒãé¢ãèããªããŠã¯ãããªãã®ã§é£ããã§ããæåŸã¯ãããæ¡ã£ããšãããåã¡ããã§ããïŒ!
é·æãšãªããŸããããæåŸãŸã§èªãã§ããã ãããããšãããããŸããïŒ
2023幎ããããããé¡ãããããŸãïŒïŒ
åèæç®
- https://github.com/mashharuki/AA-dapp
- https://coincheck.com/ja/article/410
- https://speakerdeck.com/avcdsld/dapper-contract
- https://zenn.dev/mashharuki/articles/a6973bac677427
- https://acompany.tech/privacytechlab/mpc-homomorphic-encryption/
- https://www.fireblocks.com/
- https://jpn.nec.com/press/202201/20220112_02.html
- https://solidity-by-example.org/app/multi-sig-wallet/
- https://github.com/BitGo/eth-multisig-v4
- https://gnosis-safe.io/
- https://academy.binance.com/en/articles/what-is-a-multisig-wallet
- https://academy.binance.com/en/articles/threshold-signatures-explained
- https://qiita.com/bootarouapp/items/b39ca1484874dfb37d46
- https://zenn.dev/sivira/articles/d041f1ac44ca1e
- https://github.com/mashharuki/SecretSharingRepo
- https://drive.google.com/file/d/12MJVIJFYaCWBOB0JUXTNhhTMAryCZYbt/view
- https://meety.net/matches/FHQNZgHvWgSh
- https://eips.ethereum.org/EIPS/eip-4337
- https://www.nri.com/jp/knowledge/glossary/lst/ha/secure_computation
- https://www.eaglys.co.jp/news/column/secure-computing/mpc/
- https://acompany.tech/privacytechlab/mpc-homomorphic-encryption/
- https://zenn.dev/yuki2020/articles/302e0d2b58e95
- https://zenn.dev/sivira/articles/34e8147f206ff5
Discussion