以太坊智能合約---ABI.md

以太坊的智能合約是什么

以太坊的智能合約并非現(xiàn)實(shí)中常見的合同罐寨,而是存在區(qū)塊鏈上,可以被觸發(fā)執(zhí)行的一段程序代碼踢械,這些代碼實(shí)現(xiàn)了某種預(yù)定的規(guī)則奸晴,是存在于以太坊執(zhí)行環(huán)境中的“自治代理”贱枣。以太坊的賬戶與合約如圖 1 所示监署。

以太坊的賬戶與合約

圖1:以太坊的賬戶與合約

以太坊的智能合約設(shè)計(jì)很簡(jiǎn)明。

  • 任何人都可以在以太坊區(qū)塊鏈上開發(fā)智能合約纽哥,這些智能合約的代碼是存在于以太坊的賬戶中的钠乏,這類存有代碼的賬戶叫合約賬戶。對(duì)應(yīng)地春塌,由密鑰控制的賬戶可稱為外部賬戶晓避。
  • 以太坊的智能合約程序簇捍,是在以太坊虛擬機(jī)(Ethereum Virtual Machine,EVM)上運(yùn)行的。
  • 合約賬戶不能自己?jiǎn)?dòng)運(yùn)行自己的智能合約够滑。要運(yùn)行一個(gè)智能合約,需要由外部賬戶對(duì)合約賬戶發(fā)起交易吕世,從而啟動(dòng)其中的代碼的執(zhí)行彰触。

以太坊和比特幣的一個(gè)重大不同是,前者提供了圖靈完備的編程語(yǔ)言(Solidity)和相應(yīng)的運(yùn)行環(huán)境(EVM)命辖。所謂圖靈完備况毅,指的是這個(gè)腳本編程語(yǔ)言可以運(yùn)行所有可能的計(jì)算,而比特幣的UTXO模型和腳本只能運(yùn)行部分計(jì)算尔艇。

一尔许、ABI(Application Binary Interface)

字面意思是應(yīng)用程序二進(jìn)制接口,簡(jiǎn)單的理解是合約的接口描述终娃,描述了字段名稱味廊、字段類型、方法名稱棠耕、參數(shù)名稱余佛、參數(shù)類型、方法返回值類型等窍荧。

當(dāng)合約被編譯后辉巡,對(duì)應(yīng)的abi也就確定了。

二蕊退、為什么需要ABI

  • 編寫合約代碼(一般使用solidity語(yǔ)言)
  • 編譯合約郊楣,將solidity編寫的代碼編譯成EVM可識(shí)別的bytecode,同時(shí)生成abi
  • 部署合約瓤荔,將合約部署到區(qū)塊鏈上净蚤,生成合約地址,將合約內(nèi)容(即上一步生成的bytecode)作為input date輸入输硝。部署合約是一個(gè)交易過程塞栅,所以也會(huì)生成一個(gè)交易Hash
  • 執(zhí)行合約,獲取合約地址腔丧,然后傳入?yún)?shù)調(diào)用合約中的方法放椰,獲得執(zhí)行結(jié)果

從上面的步驟可以看出,abi對(duì)于EVM來(lái)說(shuō)愉粤,其實(shí)是不需要的砾医。但是對(duì)于調(diào)用者來(lái)說(shuō),就需要知道合約有哪些方法衣厘,方法的參數(shù)是什么如蚜,返回值是什么压恒,而這些信息就記錄在智能合約的abi中。所以abi其實(shí)就相當(dāng)于開發(fā)者的接口文檔错邦,方便開發(fā)者調(diào)用執(zhí)行合約

三探赫、怎么生成ABI:

  • 使用remix
  • 使用solidity(solcjs helloworld.sol --abi)

下面是helloworld.sol的合約代碼

pragma solidity >=0.4.21 <0.6.0;

contract HelloWorld{
    address payable creator;
    string greeting;

    constructor() public {
        creator = msg.sender;
        greeting = "hello world";
    }

    function greet() view public returns (string memory) {
        return greeting;
    }

    function setGreeting(string memory _newgreeting) public {
        greeting = _newgreeting;
    }

    function kill() public{
        if (msg.sender == creator)
            selfdestruct(creator);  // kills this contract and sends remaining funds back to creator
    }
}

使用remix生成ABI(我選擇的solidity版本是0.5.11),如下:

[
    {
        "constant": false,
        "inputs": [],
        "name": "kill",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "internalType": "string",
                "name": "_newgreeting",
                "type": "string"
            }
        ],
        "name": "setGreeting",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [],
        "name": "greet",
        "outputs": [
            {
                "internalType": "string",
                "name": "",
                "type": "string"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "constructor"
    }
]

同時(shí)還得到bytecode:

{
    "linkReferences": {},
    "object": "608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600b81526020017f68656c6c6f20776f726c640000000000000000000000000000000000000000008152506001908051906020019061009c9291906100a2565b50610147565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100e357805160ff1916838001178555610111565b82800160010185558215610111579182015b828111156101105782518255916020019190600101906100f5565b5b50905061011e9190610122565b5090565b61014491905b80821115610140576000816000905550600101610128565b5090565b90565b6103b5806101566000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806341c0e1b514610046578063a413686214610050578063cfae32171461010b575b600080fd5b61004e61018e565b005b6101096004803603602081101561006657600080fd5b810190808035906020019064010000000081111561008357600080fd5b82018360208201111561009557600080fd5b803590602001918460018302840111640100000000831117156100b757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061021f565b005b610113610239565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610153578082015181840152602081019050610138565b50505050905090810190601f1680156101805780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561021d576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b565b80600190805190602001906102359291906102db565b5050565b606060018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156102d15780601f106102a6576101008083540402835291602001916102d1565b820191906000526020600020905b8154815290600101906020018083116102b457829003601f168201915b5050505050905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061031c57805160ff191683800117855561034a565b8280016001018555821561034a579182015b8281111561034957825182559160200191906001019061032e565b5b509050610357919061035b565b5090565b61037d91905b80821115610379576000816000905550600101610361565b5090565b9056fea265627a7a723158206e85a5da055a6394a6dc80d00aff410d951095de857b24fd98f2f985659a2bd264736f6c634300050b0032",
    "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLER PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xB DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x68656C6C6F20776F726C64000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x1 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH2 0x9C SWAP3 SWAP2 SWAP1 PUSH2 0xA2 JUMP JUMPDEST POP PUSH2 0x147 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0xE3 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x111 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x111 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x110 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0xF5 JUMP JUMPDEST JUMPDEST POP SWAP1 POP PUSH2 0x11E SWAP2 SWAP1 PUSH2 0x122 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x144 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x140 JUMPI PUSH1 0x0 DUP2 PUSH1 0x0 SWAP1 SSTORE POP PUSH1 0x1 ADD PUSH2 0x128 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x3B5 DUP1 PUSH2 0x156 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x41C0E1B5 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xA4136862 EQ PUSH2 0x50 JUMPI DUP1 PUSH4 0xCFAE3217 EQ PUSH2 0x10B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x18E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x109 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0x21F JUMP JUMPDEST STOP JUMPDEST PUSH2 0x113 PUSH2 0x239 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x153 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x138 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x180 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x21D JUMPI PUSH1 0x0 DUP1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SELFDESTRUCT JUMPDEST JUMP JUMPDEST DUP1 PUSH1 0x1 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH2 0x235 SWAP3 SWAP2 SWAP1 PUSH2 0x2DB JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0x2D1 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2A6 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2D1 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2B4 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x31C JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x34A JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x34A JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x349 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x32E JUMP JUMPDEST JUMPDEST POP SWAP1 POP PUSH2 0x357 SWAP2 SWAP1 PUSH2 0x35B JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x37D SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x379 JUMPI PUSH1 0x0 DUP2 PUSH1 0x0 SWAP1 SSTORE POP PUSH1 0x1 ADD PUSH2 0x361 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST SWAP1 JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 PUSH15 0x85A5DA055A6394A6DC80D00AFF410D SWAP6 LT SWAP6 0xde DUP6 PUSH28 0x24FD98F2F985659A2BD264736F6C634300050B003200000000000000 ",
    "sourceMap": "34:534:0:-;;;110:92;8:9:-1;5:2;;;30:1;27;20:12;5:2;110:92:0;151:10;141:7;;:20;;;;;;;;;;;;;;;;;;171:24;;;;;;;;;;;;;;;;;:8;:24;;;;;;;;;;;;:::i;:::-;;34:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"
}

四撬呢、ABI各參數(shù)的含義

  • name: 函數(shù)名稱
  • type:方法類型伦吠,包括function, constructor, fallback(缺省方法)可以缺省,默認(rèn)為function
  • constant:布爾值魂拦,如果為true指明方法不會(huì)修改合約字段的狀態(tài)變量
  • payable:布爾值毛仪,標(biāo)明方法是否可以接收ether
  • stateMutability:狀態(tài)類型,包括pure (不讀取區(qū)塊鏈狀態(tài))芯勘,view (和constant類型箱靴,只能查看,不會(huì)修改合約字段)荷愕,nonpayable(和payable含義一樣)衡怀,payable(和payable含義一樣)。其實(shí)保留payable和constant是為了向后兼容
  • inputs:數(shù)組安疗,描述參數(shù)的名稱和類型
    • name:參數(shù)名稱
    • type:參數(shù)類型
  • outputs:和inputs一樣狈癞,如果沒有返回值,缺省是一個(gè)空數(shù)組

五茂契、怎么使用ABI

使用ABI的細(xì)節(jié)請(qǐng)參考: 以太坊智能合約---helloworld

參考:

以太坊ABI介紹(一)

以太坊ABI介紹(二)

ABI編碼外部方法調(diào)用的方式

深入以太坊智能合約ABI

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蝶桶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子掉冶,更是在濱河造成了極大的恐慌真竖,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厌小,死亡現(xiàn)場(chǎng)離奇詭異恢共,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)璧亚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門讨韭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人癣蟋,你說(shuō)我怎么就攤上這事透硝。” “怎么了疯搅?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵濒生,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我幔欧,道長(zhǎng)罪治,這世上最難降的妖魔是什么丽声? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮觉义,結(jié)果婚禮上雁社,老公的妹妹穿的比我還像新娘。我一直安慰自己晒骇,他們只是感情好霉撵,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著厉碟,像睡著了一般喊巍。 火紅的嫁衣襯著肌膚如雪屠缭。 梳的紋絲不亂的頭發(fā)上箍鼓,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音呵曹,去河邊找鬼款咖。 笑死,一個(gè)胖子當(dāng)著我的面吹牛奄喂,可吹牛的內(nèi)容都是我干的铐殃。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼跨新,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼富腊!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起域帐,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤赘被,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后肖揣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體民假,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年龙优,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了羊异。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡彤断,死狀恐怖野舶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宰衙,我是刑警寧澤筒愚,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站菩浙,受9級(jí)特大地震影響巢掺,放射性物質(zhì)發(fā)生泄漏句伶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一陆淀、第九天 我趴在偏房一處隱蔽的房頂上張望考余。 院中可真熱鬧,春花似錦轧苫、人聲如沸楚堤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)身冬。三九已至,卻和暖如春岔乔,著一層夾襖步出監(jiān)牢的瞬間酥筝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工雏门, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嘿歌,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓茁影,卻偏偏與公主長(zhǎng)得像宙帝,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子募闲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容